6

我有一个关于在EF Code First Fluent API中定义外键的问题。 我有这样一个场景:指定外键实体框架代码首先,Fluent Api

两个人类和车。在我的情况下,汽车可以分配人员或不分配(一个或零关系)。 代码:

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Car 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Person Person { get; set; } 
    public int? PPPPP { get; set; } 
} 

class TestContext : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } 
    public DbSet<Car> Cars { get; set; } 

    public TestContext(string connectionString) : base(connectionString) 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Car>() 
        .HasOptional(x => x.Person) 
        .WithMany() 
        .HasForeignKey(x => x.PPPPP) 
        .WillCascadeOnDelete(true); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

在我的示例我要外键PERSONID重命名为PPPPP。在我的映射我说:

modelBuilder.Entity<Car>() 
      .HasOptional(x => x.Person) 
      .WithMany() 
      .HasForeignKey(x => x.PPPPP) 
      .WillCascadeOnDelete(true); 

但是我的关系是一个零,我怕我用WithMany方法的错误,但EF生成适当的映射数据库,并一切正常。

请说我的Fluent API代码是否有问题,或者是现在完成的好方法。

感谢您的帮助。

回答

3

这里我没有看到使用流畅API的问题。如果您不想在Person类上收集导航属性(即:Cars),则可以使用参数less WithMany方法。

+0

好的,谢谢你的回答。 – patryko88 2012-03-25 18:12:32

+0

你怎么能有一个“(一个或零)”的关系,并使用Fluent API的WithMany()部分? @ patryko88是否让你的代码按照你的意愿工作?如果是这样,你可以发布答案吗?谢谢! – 2012-10-16 21:07:40

+0

@BrianBehm EF只有在共享PK映射时才允许您在一对一关系的两侧具有导航属性。通过省略收集财产,关系_looks like_ one-to-one。 – Eranga 2012-10-17 04:33:01

相关问题