没有关系的实体框架必需属性

时间:2016-12-07 07:41:39

标签: entity-framework-core ef-migrations

鉴于

class Foo()
{
    Guid FooId;
    Bar Bar;
}

class Bar()
{
    Guid BarId;
}

BarFoo的必需属性,但FooBar之间没有数据库关系。将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();实体框架在FooBar之间的数据库中创建关系。

如何在不创建关系的情况下使Bar成为Foo的必需属性?

1 个答案:

答案 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字段具有可为空的列类型。

相关问题