指定外键Entity Framework Code First,Fluent API

7

我有一个问题,关于在EF Code First Fluent API中定义外键。我的情况如下:

有两个类Person和Car。在我的情况下,Car可以分配给Person或不分配(一对零关系)。

代码:

    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 代码是否有误或者现在做的方式是一个好方法。

感谢您的帮助。

1个回答

3

我认为在这里使用流畅的API并没有问题。如果你不想在Person类上使用集合导航属性(例如:Cars),可以使用无参数的WithMany方法。


你如何实现“一对(一或零)”的关系并使用Fluent API中的WithMany()部分?@patryko88,你的代码是否按照你的意愿工作了?如果是,能否发布答案?谢谢! - Brian Behm
@BrianBehm EF允许您在一对一关系的双方都具有导航属性,但仅当您具有共享PK映射时才能这样做。通过省略集合属性,该关系“看起来像”一对一。 - Eranga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接