1

有没有办法在具有集合的实体框架实体中初始化属性?

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

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 模板。)

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

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

4

3 回答 3

0

如果不编辑 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;
}
于 2013-08-23T00:43:55.757 回答
0

我不确定......但我会给你一些方向,所以你可以看看。

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

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

您可能会读到:如何在 EF CF 中设置 POCO 的默认值?可能会给你更多的洞察力。

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

于 2013-08-23T00:54:28.430 回答
0

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

于 2019-11-11T15:12:53.677 回答