我们使用数据库第一种方法来创建MVC模型,这意味着框架会在主.cs
文件中自动生成默认构造函数。但是,我有一些我想要设置的默认值,问题是每次更新.edmx
时,此框架会为此模型生成一个基本的.cs文件。有没有办法在部分类中覆盖这个构造函数?
示例
public partial class Product
{
// The framework will create this constructor any time a change to
// the edmx file is made. This means any "custom" statements will
// be overridden and have to be re-entered
public Product()
{
this.PageToProduct = new HashSet<PageToProduct>();
this.ProductRates = new HashSet<ProductRates>();
this.ProductToRider = new HashSet<ProductToRider>();
}
}
答案 0 :(得分:6)
您可以编辑生成类的t4模板,以使其生成在无参数构造函数中调用的部分方法。然后,您可以在附带的分部类中实现此方法。
编辑完成后,生成的代码应如下所示:
public Product()
{
this.PageToProduct = new HashSet<PageToProduct>();
this.ProductRates = new HashSet<ProductRates>();
this.ProductToRider = new HashSet<ProductToRider>();
Initialize();
}
partial void Initialize();
现在在你自己的部分课程中:
partial class Product
{
partial void Initialize()
{
this.Unit = 1; // or whatever.
}
}
完全覆盖默认构造函数的优点是保留了EF的初始化代码。
答案 1 :(得分:-1)
您可以看到EF生成的类是public **partial** class
。因此,创建一个新类,只需添加您的代码即可。只需确保它与EF生成的文件具有相同的命名空间
//EF Generated
public partial class Product
{
}
//Custom class
public partial class Product
{
// The framework will create this constructor any time a change to
// the edmx file is made. This means any "custom" statements will
// be overridden and have to be re-entered
public Product()
{
this.PageToProduct = new HashSet<PageToProduct>();
this.ProductRates = new HashSet<ProductRates>();
this.ProductToRider = new HashSet<ProductToRider>();
}
我应该提一下你的自定义类也应该在一个单独的文件中..我通常在与edmx文件相同的目录中创建一个Metadata文件夹,然后在那里添加我的部分类