Entity Framework 6 0.1 到 0.1 与 fluent api 的关系

Posted

技术标签:

【中文标题】Entity Framework 6 0.1 到 0.1 与 fluent api 的关系【英文标题】:Entity Framework 6 0.1 to 0.1 relationship with fluent api 【发布时间】:2018-10-04 10:45:29 【问题描述】:

假设我想在实体框架 6 中为公司拼车建模:

我有员工和汽车。 员工可以有车也可以没有车。 汽车可以属于员工,也可以不属于员工。

我知道如何在具有中间表的关系数据库中对此进行建模:

EmployeeCarAssociation
-EmployeeId
-CarId

EmpoyeeIdCarId 作为主键并在两列上使用唯一约束。

但是如何使用 EF6 Fluent Api 创建这种 0.1 到 0.1 的关系?

【问题讨论】:

【参考方案1】:

试试这个代码:

public class Employee

    public int Id  get; set; 
    public Car Car  get; set; 
    public int? CarId  get; set; 


public class Car

    public int Id  get; set; 
    public Employee Employee  get; set; 


public class ApplicationDbContext : DbContext

    public DbSet<Employee> Employees  get; set; 
    public DbSet<Car> Cars  get; set; 

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    
        modelBuilder.Entity<Car>()
            .HasOptional(c => c.Employee)
            .WithOptionalDependent(e => e.Car)
            .Map(config =>
            
                config.MapKey("EmployeeId");
            );

        base.OnModelCreating(modelBuilder);
    

【讨论】:

这适用于实体框架,但不会在数据库级别强制执行 0.1-0.1 关系。它只在 Car-Table 中为 EmployeeId 创建一个 ForeignKey-Constraint。从技术上讲,如果将值直接输入数据库,则仍然可以将多辆汽车分配给一名员工。但只要只使用实体框架来改变数据,这就是要走的路。

以上是关于Entity Framework 6 0.1 到 0.1 与 fluent api 的关系的主要内容,如果未能解决你的问题,请参考以下文章

添加 [DataContract] 到 Entity Framework 6.0 POCO Template

从 Entity Framework 5 升级到 6

在Oracle中使用Entity Framework 6 CodeFirst

如何将 Database First Entity Framework 4 升级到 6

Entity Framework 6 将存储过程添加到数据模型后无法构建

在 Entity Framework 6 中替换自跟踪实体