【发布时间】:2013-11-03 13:56:48
【问题描述】:
我在使用 Entity Framework 5 时遇到问题
在我的程序中,我有一个定义如下的基类:
public abstract class CoreProduct
{
public abstract decimal Price { get; set; }
public abstract decimal CategoryID { get; set; }
public abstract decimal Quantity { get; set; }
public decimal CalculatePrice()
{
//Code to calculate the price here
}
}
我想让实体框架自动生成特定的类来继承这个类,这样我就可以在给定数量等的情况下计算它们的价格。
所以我所做的是为普通产品创建一个新文件并这样做:
public partial class Product : CoreProduct
{
public override decimal Price { get; set; }
public override decimal CategoryID { get; set; }
public override decimal Quantity { get; set; }
}
但是由于字段 Price、CategoryID 和 Quantity 是由 Entity Framework 自动生成的,我必须从 EF 自动生成的文件中删除它们,然后一切正常。
我的问题是,每次我必须更新我的模型时,代码都会再次自动生成,我必须手动重新删除继承我的 CoreProduct 类的所有类的所有字段。
有什么更好的方法可以实现这一点,这样我就不必在每次必须更新模型时手动删除 50 个字段?
【问题讨论】:
-
你真的需要这些属性在基类中是抽象的吗?你真的在你的覆盖中做了什么吗?
-
除了覆盖它们之外,我实际上并没有对属性做太多事情,我的问题是如果我只在父类上声明它们,我就无法从基类访问它们,除非有办法我不知道?
-
如果它们在父类中是公共的(或受保护及以上,但 EF 想要公共),您可以在子类中访问它们。请注意,当我说父级时,我的意思是在您的 CoreProduct 类中声明它们。
-
即使我只在 CoreProduct 类上将它们声明为 public,它也不能解决我每次触摸模型时都必须从 EF 自动生成中手动删除 50 个字段的问题,对吧?我怎样才能改变我的课程,这样我就不必这样做了?
-
如果您在 CoreProduct 中声明它们并从 Product 中删除属性声明,则不必删除任何内容。一开始就不应该生成它们。
标签: c# entity-framework inheritance abstract-class partial-classes