指定外键实体框架代码优先,Fluent Api

2024-03-03

我有一个关于在 EF Code First 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 重命名为 PPPPPP。在我的映射中我说:

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

但我的关系是一对零,我担心我使用 WithMany 方法会犯错误,但 EF 生成具有正确映射的数据库,并且一切正常。

请指出我的 Fluent API 代码是否错误,或者像现在这样完成是一个好方法。

感谢帮助。


我在这里没有看到使用 Fluent API 的问题。如果您不想要集合导航属性(即:Cars)在Person类你可以少用参数WithMany method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指定外键实体框架代码优先,Fluent Api 的相关文章

随机推荐