鉴于
class Foo()
{
Guid FooId;
Bar Bar;
}
class Bar()
{
Guid BarId;
}
Bar
是Foo
的必需属性,但Foo
和Bar
之间没有数据库关系。将Foo
分配给Bar
后,可以从数据库中删除Bar
而不删除任何Foo
。
如何在流畅的API中配置?如果我试试
entity.Property(e => e.Bar)
.IsRequired();
实体框架迁移会引发错误
The property 'Bar' cannot be added to the entity type 'Foo' because a navigation property with the same name already exists on entity type 'Foo'
如果我尝试entity.HasOne(e => e.Bar).WithMany().IsRequired();
实体框架在Foo
和Bar
之间的数据库中创建关系。
如何在不创建关系的情况下使Bar
成为Foo
的必需属性?
答案 0 :(得分:1)
选项一
class Foo()
{
Guid FooId;
Guid BarId;
}
没有对象引用 - 没有关系。默认情况下需要Guid,无需其他配置。您可以在此处输入任何值,即使此BarId没有Bar
条记录也存在。
选项二
其他方式是创建/拥有关系,强制引用完整性,但使用级联选项SetNull
:
fooEntity.HasOne(x => x.Bar).WithMany().OnDelete(DeleteBehavior.SetNull);
当您删除链接到Foo
时,这(您应该检查是否是数据库提供程序/引擎支持)不会删除Bar
。相反,Foo.BarId
将设置为null
。当然,这会导致BarId
表中的Foo
字段具有可为空的列类型。