亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

EF Core3.0 創建聯合唯一索引、外鍵和條件索引

標簽:
MySQL C# .NET

1、DbContext创建联合唯一索引和外键

modelBuilder.Entity<MemberValueCard>(b =>
{
    b.OwnsOne(v => v.CardInfo);  //关联实体
    
    b.HasMany(v => v.MemberValueCardRecord)   
     .WithOne() 
     .HasForeignKey(nameof(MemberValueCardRecord.MemberCardId));  //创建外键
     
    b.HasIndex(v => new {v.VenueId,v.MemberId})
     .IsUnique();  //创建VenueId和MemberId的联合唯一索引
}

因为EF Core3.0不支持创建值对象的联合唯一索引,只能在Migrations中的UP函数中手写。

migrationBuilder.CreateIndex(
    name: "IX_MemberValueCards_VenueId_CardInfo_Id",
    table: "MemberValueCards",
    columns: new[] { "VenueId", "CardInfo_Id" },
    unique: true
);

解释:将MemberValueCard中的VenueId和CardInfo中的Id创建联合唯一索引


2、条件索引

我用的mysql版本是8.0.21,老版本不一定支持这种写法。

protected override void Up(MigrationBuilder migrationBuilder)       
{       
     migrationBuilder.Sql(@"CREATE UNIQUE INDEX IX_UniqueReferId ON merchanttransfertobankcards   ((CASE WHEN Status not in (8, 16, 32) THEN UniqueReferId END))");      
 }

解释:当status不等于8、16、32时,创建UniqueReferId的唯一索引。


3、条件联合唯一索引

CREATE UNIQUE INDEX IX_Unique_CourseId_Type_UserId ON orders (	
 ( CASE WHEN `Status` = 1 THEN CourseInfo_Id END ),	
 ( CASE WHEN `Status` = 1 THEN Sku_Type END ),
 ( CASE WHEN `Status` = 1 THEN User_UserId END )
 );

解释:当订单(order)状态(status)为1时,创建(CourseInfo_Id,Sku_Type,User_UserId)的联合唯一索引


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
1
獲贊與收藏
3

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消