关键词汇解释

required / optional 必须 / 可空
principal / dependent 表示哪个是主键表 / 表示哪个是外键表
hasrequired / withrequired has表示的是正向的关系,则with表示的是反向关系
   

数据加载

如果用virtual关键字,则标识为该属性会懒加载(第一次用的时候加载)
如果不用virtual关键字,则需要用include主动标识立即加载
可以关闭懒加载:this.Configuration.LazyLoadingEnabled = false;

一对一或一对零关系

class user
   2: {
int id { get; set; }
string code { get; set; }
string name { get; set; }
   6: }
class dep
   8: {
int id { get; set; }
virtual user user { get; set; }
  11: }
class MyContext : DbContext
  13: {
void OnModelCreating(DbModelBuilder modelBuilder)
  15:     {
  16:         modelBuilder.Entity<dep>()
  17:             .HasRequired(d => d.user)
  18:             .WithOptional();
  19:     }
  20: }

说明:dep里user不能为空,user里不包含dep的导航

如果改为:

   1: modelBuilder.Entity<dep>()
   2:                 .HasRequired(d => d.user)
   3:                 .WithRequiredDependent();

则:两边都不能为空

多对多关系

class user
   2: {
int id { get; set; }
string code { get; set; }
string name { get; set; }
virtual ICollection<dep> Deps { get; set; } 
   7: }
class dep
   9: {
int id { get; set; }
virtual ICollection<user> Users { get; set; }
  12: }
class MyContext : DbContext
  14: {
void OnModelCreating(DbModelBuilder modelBuilder)
  16:    {
  17:        modelBuilder.Entity<dep>()
  18:            .HasMany(d => d.Users)
  19:            .WithMany(user => user.Deps);
  20:    }
  21: }

这个简单,不解释

一对多关系

class user
   2: {
int id { get; set; }
string code { get; set; }
string name { get; set; }
int DepId { get; set; }
virtual dep Dep { get; set; }
   8: }
class dep
  10: {
int id { get; set; }
virtual ICollection<user> Users { get; set; }
  13: }
class MyContext : DbContext
  15: {
void OnModelCreating(DbModelBuilder modelBuilder)
  17:    {
  18:        modelBuilder.Entity<user>()
  19:            .HasRequired(u => u.Dep)
  20:            .WithMany(d => d.Users)
  21:            .HasForeignKey(u => u.DepId)
false);
  23:    }
  24: }

说明:dep里包含多个user,user里包含一个dep,显示指定外键列为DepId(如果不指定,自动生成的数据库里外键列为Dep_id);

WillCascadeOnDelete(false)表示不级联删除

组合外键

class user
   2: {
int id { get; set; }
string code { get; set; }
string name { get; set; }
int DepId { get; set; }
string DepCode { get; set; }
virtual dep Dep { get; set; }
   9: }
class dep
  11: {
int id { get; set; }
string code { get; set; }
virtual ICollection<user> Users { get; set; }
  15: }
class MyContext : DbContext
  17: {
void OnModelCreating(DbModelBuilder modelBuilder)
  19:   {
new { d.id, d.code });
  21:  
  22:       modelBuilder.Entity<user>()
  23:           .HasRequired(c => c.Dep)
  24:           .WithMany(d => d.Users)
new { d.DepId, d.DepCode });
  26:  
  27:   }
  28: }

简单不解释

重命名外键列

   1: modelBuilder.Entity<user>()
   2:                 .HasRequired(c => c.Dep)
   3:                 .WithMany(t => t.Users)
));

相关文章:

  • 2022-12-23
  • 2021-04-12
  • 2022-02-02
  • 2022-12-23
  • 2021-06-17
  • 2021-07-11
猜你喜欢
  • 2021-09-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-24
  • 2021-08-18
相关资源
相似解决方案