在EF 6(代码优先)中,是否可以设置导航属性而不强制执行参照完整性约束?
例如:
public class Person{
public IList<Pet> Pets { get; set; }
}
public class Pet{
public int OwnerId { get; set; }
public Person Owner { get; set; }
}
因此,在上面的示例中,我希望能够使用OwnerId添加Pet,即使Owers表中不存在该所有者。
由于
马特
答案 0 :(得分:2)
您可以使用流畅的API定义关系。
modelBuilder.Entity<Pet>
.hasOptional(p => p.Owner)
.willCascadeOnDelete(false);
这会将关系属性配置为可选,并确保级联删除不会生效。您可以在没有Pet
的情况下创建Owner
,删除Owner
也不会删除关联的Pets
。
然而,您无法将Pet.OwnerId
分配给OwnerId
表格中不存在的Owner
。如果您真的需要某种方法来跟踪无效的OwnerId
值,您需要有一个单独的属性,您可以使用任意值手动更新,或者您需要在不使用导航属性的情况下定义这些对象,并且手动执行查找。
这将是一种特殊情况,您需要为OwnerId
提供与Owner
表不匹配的任意值;在99%的案例中,只接受有效OwnerId
或null
的可选关系。
OwnerId
对象上实际上不需要Pet
属性,但如果它存在,则应设置为int?
可以为空。
答案 1 :(得分:0)
简答:不要使用EF。 Object Relational Mappers的重点是确保您拥有有效数据以及帮助检索/保存它
你真正想要的只是某种映射器。
长答案:好奇自己