【发布时间】:2015-01-06 07:23:04
【问题描述】:
我有一个使用 EF 和代码优先的 MVC 项目。
我有一个模型 PropBase 和一个模型 MyProp - 它们被映射到同一个表(带有一个自动“鉴别器”列)。
我在 MyProp 中添加了两个属性——prop1 和 prop2:
public class PropBase
{
public double Prop0 { get; set; }
}
public class MyProp: PropBase
{
public double Prop10 { get; set; }
public double Prop1{ get; set; } // new property
public int Prop2{ get; set; } // new property
}
我还添加了一个新的迁移:
public partial class AddProps12 : DbMigration
{
public override void Up()
{
AddColumn("dbo.Props", "Prop1", c => c.Double(nullable: true, defaultValue: 0));
AddColumn("dbo.Props", "Prop2", c => c.Int(nullable: true, defaultValue: 0));
}
public override void Down()
{
DropColumn("dbo.Props", "Prop1");
DropColumn("dbo.Props", "Prop2");
}
}
但是当我运行应用程序时 - 新列添加了 null 并且就行了
return m_myPropsRepository.AsQueryable().ToList();
我收到此错误
“MyProp”上的“Prop1”属性无法设置为“null”值。 您必须将此属性设置为“Double”类型的非空值。
我不能使用 nullable:false,因为当我向表中插入一个新的 PropBase 时 - 它不知道 Prop1 和 Prop2 并因此插入 NULL,然后我得到一个错误,因为我将它定义为不可为空。
我需要一种方法来实现它可以为空 AND 将 0 作为当前 MyProp 行的默认值。
【问题讨论】:
-
什么意思'无论如何我都需要它,因为 PropBase 在同一个表中并且不包含 prop1 + prop2'
-
表 Props 包含 PropBase 行和 MyProp 行。 PropBase 没有属性 prop1 和 prop2,因此 prop1 和 prop2 的列必须为 nullbale。它与 prop0 和我拥有的其他模型完美配合 - 但对于这些模型,表格是使用 CodeFirst 而不是手动迁移创建的。
-
天哪,你是在一张桌子上使用 2 个实体吗?
-
当然。我用它所有的时间。使用 CodeFirst 非常容易。 EntityFramework 只是自动添加“鉴别器”列,因此它知道每一行是什么类型。
-
@Mike - 看这里techiesweb.net/…
标签: c# entity-framework-5 entity-framework-migrations