我有mvc使用数据库优先方法生成的以下部分类。 如何删除重新初始化hashset类,以便我可以为其设置默认值?
由mvc生成的原始类
public partial class GeneratedClass
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public GeneratedClass()
{
this.GeneratedClass= new HashSet<GeneratedClass>();
}}
我的数据anotation partial class
[MetadataType(typeof(GeneratedClassAttribute))]
public partial class GeneratedClass
{
public GeneratedClass()
{
MyPropertyValue = "default value";
}
}
错误抛出
严重级代码描述项目文件行抑制状态 错误CS0121以下方法或属性之间的调用不明确:&#39; GeneratedClass&#39;和&#39; GeneratedClass&#39;
更新了工作代码
感谢Tetsuya Yamamoto指出创建具有相同参数的2个构造函数。所以我添加了一个虚拟参数和炸弹它可以工作。
public GeneratedClass(string dummyValue="")
工作2 作者:Kirk Woll
使用OnCreate
答案 0 :(得分:1)
正如Tetsuya在他的评论中所描述的,部分类主要是用于将单个类的实现分成多个文件的语法糖。因此,除了一些特定的可扩展性点(基本上是部分方法)之外,您无法在两个文件中声明具有相同名称的成员。
为了澄清,(通常生成的)类可以定义一个&#34; partial&#34;方法:
partial void Foo();
但除非成员明确支持partial
修饰符,否则您无法在多个文件中声明该成员。我不确定你控制生成的构造函数有多少,但理想情况下它会定义一个OnCreated
部分方法,如下所示:
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public GeneratedClass()
{
this.GeneratedClass= new HashSet<GeneratedClass>();
OnCreated();
}
partial void OnCreated();
然后在你的&#34;数据anotation partial class&#34;你将实现OnCreated
部分方法:
private void OnCreated()
{
MyPropertyValue = "default value";
}
现在操作顺序很明确。 (如果原始语法实际上受支持,哪个构造函数应该在另一个之前调用?)实际构造函数执行,并将任何后续初始化委托给partial方法(允许未实现)。