EF中映射
---恢复内容开始---
EF中的数据表的映射在DbContext的OnModelCreating的方法中
public class XXXXXX : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<entity>(t=>
{
t.HasKey(c => c.ID);//主键
t.HasKey(f => new { f.Name, f.ID});//设置Name,ID为联合主键
t.HasIndex(c => c.ID);//设置索引
t.HasAlternateKey(f => f.Name);//唯一约束
t.Property(f => f.Id).HasColumnName("id");//数据库中的字段名称设置为id
t.Property(f => f.Name).HasColumnName("Name").HasField("name");//设置和字段name绑定,这样就可以设置属性Name为只读属性了,查询数据绑定的时候会自动和私有字段id绑定,领域设计中非常有用
t.Property(f => f.AppID).HasColumnName("appid").HasField("appID").HasMaxLength(50);//设置字段的长度
t.Property(f => f.AppID).HasColumnName("appid").HasField("appID").HasMaxLength(50).IsRequired();//设置字段是否为null
t.Property(f => f.AppID).HasColumnName("appid").HasField("appID").HasColumnType("varchar");//设置数据表中的字段类型为varchar
t.Property<string>("V_Address").HasColumnName("address").HasColumnType("jsonb").IsRequired();//设置影子属性V_Address,这个属性不会出现在实体中,也不会出现在数据库中,会和数据库中的address字段绑定,可以用Context.Entry(entity).Property("V_Address").CurrentValue来获取影子属性,CurrentValue是读写属性,也可以直接给CurrentValue设置值
t.HasMany(c => c.Groups).WithOne().HasForeignKey("officialaccountid").IsRequired().OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade);//设置一对多关系,并且设置为级联删除
t.Ignore(c => c.AppID);//忽略AppID字段不映射到数据库表
t.Property(f => f.Id).HasColumnName("id").UsePropertyAccessMode(Microsoft.EntityFrameworkCore.Metadata.PropertyAccessMode.Field);//设置重建实体的时候,是将数据通过属性,字段或者构造器设置
t.Property(f => f.Name).IsRowVersion();//如果是sql server或者mysql,用来设置启用并发,t.Property(f => f.Name).IsConcurrencyToken()也是设置并发
t.ForNpgsqlUseXminAsConcurrencyToken();//如果是postgresql数据库则是设置数据库启用并发,
t.ToTable("xxxxx");//设置数据表明
});
}
}
---恢复内容结束---

浙公网安备 33010602011771号