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");//设置数据表明

});

  }

}

---恢复内容结束---

posted @ 2017-05-20 18:13  HawkSharp  阅读(1048)  评论(0)    收藏  举报