C# 实体框架6 0.1到0.1与fluent api的关系

C# 实体框架6 0.1到0.1与fluent api的关系,c#,entity-framework,entity-framework-6,ef-fluent-api,C#,Entity Framework,Entity Framework 6,Ef Fluent Api,假设我想在实体框架6中为公司汽车池建模: 我有员工和汽车 雇员可以有车也可以没有车 汽车可以属于员工,也可以不属于员工 我知道如何在具有中间表的关系数据库中对此进行建模: EmployeeCarAssociation -EmployeeId -CarId 使用empoyeid和CarId作为主键,并在两列上使用uniqe约束 但是我如何使用EF6 Fluent Api创建这种0.1到0.1的关系呢?试试下面的代码: public class Employee { public in

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

  • 我有员工和汽车
  • 雇员可以有车也可以没有车
  • 汽车可以属于员工,也可以不属于员工
我知道如何在具有中间表的关系数据库中对此进行建模:

EmployeeCarAssociation
-EmployeeId
-CarId
使用
empoyeid
CarId
作为主键,并在两列上使用uniqe约束

但是我如何使用EF6 Fluent Api创建这种0.1到0.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);
    }
}
公共类员工
{
公共int Id{get;set;}
公共小汽车{get;set;}
公共int?CarId{get;set;}
}
公车
{
公共int Id{get;set;}
公共雇员雇员{get;set;}
}
公共类ApplicationDbContext:DbContext
{
公共数据库集雇员{get;set;}
公共数据库集车辆{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.has可选(c=>c.Employee)
.带有可选依赖项(e=>e.Car)
.Map(配置=>
{
config.MapKey(“EmployeeId”);
});
基于模型创建(modelBuilder);
}
}

这在实体框架中起作用,但不能在数据库级别强制执行0.1-0.1关系。它仅在Car表中为EmployeeId创建ForeignKey约束。从技术上讲,如果员工直接将值输入数据库,那么仍然可以将多辆车分配给一名员工。但是,只要只使用实体框架来修改数据,就可以这样做。