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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦