【问题标题】:Initialize a property in Entity Framework that already has a constructor初始化实体框架中已有构造函数的属性
【发布时间】:2013-08-23 00:22:52
【问题描述】:

是否有任何方法可以初始化具有集合的实体框架实体中的属性?

这是为具有集合的实体生成的代码:

public partial class MyEntity
{
    public MyEntity()
    {
       this.MySubEntities = new HashSet<MySubEntity>();
    }

    public bool IsActive {get; set;}
    public virtual ICollection<MySubEntity> MySubEntities {get; set;}
}

如果我需要创建一个新的MyEntity 并且我想默认为IsActive = true,这是无法完成的! (除非我编辑 T4 模板。)

请告诉我有一种方法可以在不编辑生成的文件(或 T4)的情况下默认 IsActive = True

注意:我有 AutoMapper 为我制作实体,所以 new MyEntity {IsActive = true} 不起作用。

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    不编辑 T4,我看不出你能做什么。

    所以你可以改变你的 T4 来生成类似的东西(在 getter 中初始化空列表,而不是在 ctor 中这样做)

    private ICollection<MySubEntity> mySubEntities_;
    public virtual ICollection<MySubEntity> MySubEntities {
       get {
            return mySubEntites_ ?? (mySubEntites_ = new HashSet<MySubEntity>());
       }
       set {
           mySubEntities_ = value;
       }
    }
    

    那么你就不需要生成类中的空ctor,并且可以有一个带有空ctor的部分类,做你需要的事情

    public MyEntity() {
       IsActive = true;
    }
    

    【讨论】:

      【解决方案2】:

      我不确定……但我会给你一些指示,让你看看。

      如果您将数据库的默认值设置为 IsActive = true,我相信 EF 会自行处理。如果没有,我很确定您可以在 Designer 上设置默认值。

      我认为你也可以做另一个构造函数,因为这是部分类。

      您可能会阅读此内容:How to set default value for POCO's in EF CF? 可能会给您更多见解。

      另一种解决方案(实用但不好并且没有回答问题)是将 IsActive 更改为 IsInactive 所以它默认为 false :D - 我在设计数据库时确实这样做了。

      【讨论】:

        【解决方案3】:

        您可以编辑 EF 模型以添加默认值。在列的属性中,您可以找到“默认值”并将其设置为您想要的。默认设置为“(无)”。

        【讨论】:

          猜你喜欢
          • 2015-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-11
          • 1970-01-01
          • 2017-06-13
          • 1970-01-01
          • 2020-06-12
          相关资源
          最近更新 更多