我已经注意到EF 6.1代码的问题。我有以下类 -Entity Framework 6.1 - 代码优先 - 引用属性加载不正确
namespace Domain
{
public interface ISupportsOptimisticConcurrency
{
byte[] RowVersion { get; set; }
}
public class Entity : ISupportsOptimisticConcurrency
{
public int Id { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
public class Lookup : Entity
{
public Lookup()
{
Description = string.Empty;
}
[Required]
[MaxLength(100)]
public string Name { get; set; }
[MaxLength(300)]
public string Description { get; set; }
}
public class GroupType : Lookup
{
}
public class Group:Entity
{
public Group()
{
GroupType = new GroupType();
}
[Required]
public string Name { get; set; }
[Required]
public Guid ExternalId { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string MonitorEmail { get; set; }
public string UrlRequestEmail { get; set; }
public bool UsesDefaultOptions { get; set; }
[ForeignKey("GroupType")]
public int GroupTypeId { get; set; }
public virtual GroupType GroupType { get; set; }
}
}
我写了一个典型的存储库类来访问数据库中的数据。现在,当我尝试查找按组标识并包含GroupType时,GroupType无法正确加载,并且GroupType的Name属性为空。
有趣的是,当我删除初始化一个新GroupType的Group构造函数时,事情开始正常工作。
你能解释一下这种行为吗? 注意:这个场景和NHibernate一样正常工作。
感谢您的回复。
如果我不得不猜测,我会说与继承(和多个非抽象类型)有关。没有其他属性可用于GroupType,因此鉴别器可能会感到困惑。对于初学者,“实体”应该是“抽象的”,然后在定义或声明“查找”与“组类型”的鉴别器。 –
可能发生的事情是EF看到已经有一个GroupType,所以它没有实例化一个新的。为什么你有构造函数实例化GroupType?你是否将它与集合导航属性相混淆?那些在构造函数中实例化的,但单数的引用导航属性不应该。 –