Entity Framework 配置关系(1对1,1对0)
实体之间的关系对应数据库表的关系,有1:0,1:1,1:N,N:N这几种。这里介绍1:0、1:1这两种配置关系。
举例说明:Employee表示员工,Account表示通讯账号。有些员工使用通讯账号,但是有些员工不适用这些通讯账号。从员工的角度来观察,员工Employee与通讯账号Account之间的关系就是一个员工对应一个通讯账号(1:1),或者一个员工没有铜须你账号(1:0)。从通讯账号Account的角度来观察,一个通讯账号对应一个员工(1:1)。
(1)实体类:Employee
1 public class Employee 2 { 3 public int Id { get; set; } 4 5 public string Name { get; set; } 6 7 public virtual Account Account { get; set; } 8 }
(2)实体类:Account
1 public class Account 2 { 3 public int Id { get; set; } 4 5 public string UserName { get; set; } 6 7 public string Password { get; set; } 8 9 public virtual Employee Employee { get; set; } 10 }
(3)映射Employee
1 public class EmployeeMap : EntityTypeConfiguration<Employee> 2 { 3 public EmployeeMap() 4 { 5 this.ToTable("Employee"); 6 7 this.HasKey(p => p.Id); 8 9 this.Property(p => p.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 10 this.Property(p => p.Name).IsRequired().HasMaxLength(63); 11 } 12 }
(4)映射Account
1 public class AccountMap : EntityTypeConfiguration<Account> 2 { 3 public AccountMap() 4 { 5 this.ToTable("Account"); 6 7 this.HasKey(p => p.Id); 8 9 this.Property(p => p.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 10 this.Property(p => p.UserName).IsRequired().HasMaxLength(63); 11 this.Property(p => p.Password).IsRequired().HasMaxLength(63); 12 13 this.HasRequired(m => m.Employee) 14 .WithOptional(m => m.Account) 15 .Map(m => m.MapKey("AccountId")) 16 .WillCascadeOnDelete(true); 17 } 18 }
(5)DbContext
1 public class EntFraContext : DbContext 2 { 3 public IDbSet<Account> AccountSet { get; set; } 4 5 public IDbSet<Employee> EmployeeSet { get; set; } 6 7 protected override void OnModelCreating(DbModelBuilder modelBuilder) 8 { 9 modelBuilder.Configurations.Add(new AccountMap()); 10 modelBuilder.Configurations.Add(new EmployeeMap()); 11 12 base.OnModelCreating(modelBuilder); 13 } 14 }
分类: EntityFramework