即使属性类型不可为空,是否可以将数据库列配置为允许NULL?

时间:2018-08-23 08:01:02

标签: entity-framework-core ef-fluent-api

此问题与EF Core Issue #13079: Columns for nested owned types don't allow NULL although owned by derived entity有关。但这可能更笼统(例如,是否必须匹配现有的建模不良数据库)。至少对于带有TPH的派生实体中的嵌套拥有的类型,它将提供一种配置数据库的方式,以使它的架构现在像在解决链接问题之后的样子:
即使属性类型不可为空,是否可以将属性的数据库列配置为允许NULL?如果是,怎么办?

给出以下类型:

public class SubData
{
    public Int32 Prop { get; set; }
}

是否可以为SubData.Prop手动配置数据库列以允许NULL

IsRequired(false)无法使用,因为Int32不可为空。如果需要,我们可以假设已知该列的名称为Data_SubData_Prop,并且该表的名称例如为Entity。可能可以使用SQL ALTER COLUMN完成。但是它也可以通过Fluent API完成吗?

1 个答案:

答案 0 :(得分:0)

  

是否可以手动将SubData.Prop的数据库列配置为允许NULL?

是的,这是通过使用SQL,例如(对于Microsoft SQL Server)

if ( context.Database.EnsureCreated() )
{
    context.Database.ExecuteSqlCommand("ALTER TABLE Entity ALTER COLUMN Data_SubData_Prop int NULL");
}
  

但是它也可以通过Fluent API完成吗?

不幸的是,我不知道。 (有关comment名称空间的问题,请参见我的Microsoft.EntityFrameworkCore.Xyz.Internal。)