我为TPH设置了一个抽象基类:
public abstract class BaseSchema
{
...
public abstract bool IsFilterRequired { get; set; }
...
}
..并且我从其他继承类继承自它:
public class DerivedSchema : BaseSchema
{
.....
public override bool IsFilterRequired{ get; set; }
....
}
此设置对于这些类中的其他继承属性(我遗漏的那些属性)也能很好地工作,并且到目前为止,该设置一直有效。
这是我上面显示的'IsFilterRequired'属性的附加内容,这就是问题-我将此抽象属性添加到基类中,并在派生类中覆盖它。我希望EF能够做到这一点并生成一个迁移,以将新列添加到SQL Server表中,但是它只会创建一个空迁移。 这可能是什么问题? 谢谢!
答案 0 :(得分:1)
感谢@ ivan-stoev的指导。基本上,EF将忽略抽象属性。如果希望在基类上指定要由派生类继承的属性,则希望EF创建一个数据库列来表示该属性。将属性标记为“虚拟”允许EF创建列:
public abstract class BaseSchema
{
...
public virtual bool IsFilterRequired { get; set; }
...
}
顺便说一句,如果您有多个从公共TPH基继承的派生类,则此属性现在将对所有它们可用。如果这是您不想要的行为,则需要在它不属于的派生类中重写它,并将其标记为未实现。它不理想,但是比替代方法更好,它会引发非常容易捕获的运行时错误,而该错误会在单元测试中被捕获。
public class DerivedSchemaThatDoesNotNeedThisProperty : BaseSchema
{
...
public override bool IsFilterRequired
{
get { return false; }
set { throw new NotImplementedException($"{nameof(IsFilterRequired)} property is not implemented in this class."); }
}
...
}