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 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦