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代码是否有问题,或者是现在完成的好方法。
感谢您的帮助。
好的,谢谢你的回答。 – patryko88 2012-03-25 18:12:32
你怎么能有一个“(一个或零)”的关系,并使用Fluent API的WithMany()部分? @ patryko88是否让你的代码按照你的意愿工作?如果是这样,你可以发布答案吗?谢谢! – 2012-10-16 21:07:40
@BrianBehm EF只有在共享PK映射时才允许您在一对一关系的两侧具有导航属性。通过省略收集财产,关系_looks like_ one-to-one。 – Eranga 2012-10-17 04:33:01