如何在mvc中重新初始化HashSet分部类?

时间:2017-06-21 02:42:35

标签: c# asp.net-mvc

我有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

1 个答案:

答案 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方法(允许未实现)。