【发布时间】:2015-11-09 11:21:53
【问题描述】:
是否可以为实体设置默认对象?
假设我有一个 Person 实体,它最初不需要 Profile。
现在我需要Profile - 但现有实体目前没有Profile。
有没有一种方法可以在将来加载这些实体时为它们提供默认对象,因此使用Person 实体的任何人都可以假设Profile 永远不会为空并且总是有一个值 - 即使它是一个默认值。
您可以在下面看到我尝试过的内容 - 它确实创建了一个默认值 - 但即使数据库中有某些内容,它也总是返回默认对象。
- 如果
Profile是null我想返回一个默认的初始化对象 - 如果
Profile不是null我想从数据库中返回对象
另外 - 将“默认”对象附加到我的 dbcontext 的最明智的方法是什么?
我怎样才能实现这种期望的行为?
public class Person
{
[Key]
public int Id {get; set;}
private Profile _profile;
public virtual Profile Profile
{
get
{
return _profile ?? (_profile= new Profile
{
Person = this,
PersonId = Id
});
}
set
{
_profile = value;
}
// properties
}
}
public class Profile
{
[Key, ForeignKey("Person")]
public int PersonId {get; set;}
[ForeignKey("PersonId")]
public virtual Person Person{ get; set; }
// properties
}
我知道您可以初始化集合以使其不为空,但我也想初始化单个对象。
【问题讨论】:
-
当您加载一个在数据库中没有配置文件的
Person对象然后更新其上的某些属性并将其保存回来时,您希望发生什么? EF 是否应该在数据库中为此类人员创建个人资料? -
@YacoubMassad 我想要一个没有
Profile的Person有一个Profile的实例化实例-除非调用SaveChanges(),否则它不必保存-但我目前不那么担心这部分 - 我只想实例化一个Profile如果它为空,如果它不为空,则正常从数据库加载。 -
这是什么
User类?它是Person的基类吗? -
@YacoubMassad 抱歉 - 我调整了我的实际代码以使问题更容易理解,但我忘记将
User类重命名为 Person - 它实际上应该是Person- 我'已经编辑了我的问题以反映这一点。 -
这听起来很奇怪。你的用例是什么?
标签: c# entity-framework entity-framework-6