gpt4 book ai didi

c# - 向实体添加新的构造函数

转载 作者:太空狗 更新时间:2023-10-30 00:54:33 26 4
gpt4 key购买 nike

我正在使用 EF4.3。这是我的第一个项目,所以我边做边学。

在某些情况下,我需要为实体实现额外的构造函数。我创建了一个额外的部分类来执行此操作,因此实体 Users 将具有关联的类 User2。

我注意到 EF 总体上不会创建构造函数,但也有这样的实例:

public partial class User
{
public User()
{
this.BookmarkedDeals = new HashSet<BookmarkedDeal>();
this.BookmarkedStores = new HashSet<BookmarkedStore>();
}

public System.Guid UserId { get; set; }
public int UserStatusId { get; set; }
public int UserRoleId { get; set; }
public System.DateTime CreatedOn { get; set; }
public System.DateTime LastVisitedOn { get; set; }

public virtual ICollection<BookmarkedDeal> BookmarkedDeals { get; set; }
public virtual ICollection<BookmarkedStore> BookmarkedStores { get; set; }
public virtual Subscriber Subscriber { get; set; }
}

这让我有点担心,因为通过设计器添加导航属性非常容易,而基础构造函数中的代码却遗漏了。

    public User()
{
this.BookmarkedDeals = new HashSet<BookmarkedDeal>();
this.BookmarkedStores = new HashSet<BookmarkedStore>();
}

我的问题是,我是否需要从我的附加构造函数调用基本构造函数,我是否应该将代码 (: this User()) 放在所有情况下调用我的基本构造函数作为保障?

最佳答案

EF(数据库优先或模型优先)创建那些默认构造函数...

public User()
{
this.BookmarkedDeals = new HashSet<BookmarkedDeal>();
this.BookmarkedStores = new HashSet<BookmarkedStore>();
}

...仅作为实例化导航集合的帮助程序,以保护您免受 NullReferenceException 的影响。但这不是必需的。如果您从包含 BookmarkedDealsBookmarkedStores 的数据库加载 User 实体,EF 无论如何都会实例化这些集合。如果您自己创建一个 User,如果构造函数不存在,您只需手动实例化这些集合:

var user = new User { BookmarkedDeals = new HashSet<BookmarkedDeal>() };
user.BookmarkedDeals.Add(new BookmarkedDeal());

如果您添加一个新的构造函数,我会调用默认构造函数以使所有构造函数之间的集合实例化保持一致。但我认为它必须是 this,而不是 base,因为两个构造函数都在同一个类中,而不是在继承层次结构中:

public User(SomeType SomeParameter) : this()
{
//Do somthing with SomeParameter...
}

关于c# - 向实体添加新的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12446398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com