Entity Framework 配置关系(1对1,1对0)
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

浙公网安备 33010602011771号