实体框架6.1 -代码优先-引用属性不能正确加载
本文关键字:不能 属性 加载 引用 框架 代码 实体 | 更新日期: 2023-09-27 18:02:37
我首先注意到EF 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; }
}
}
我已经编写了一个典型的Repository类,用于从DB访问数据。现在,当我尝试通过Id查找组,并包含GroupType时,GroupType不能正确加载,并且GroupType的Name属性为空。
有趣的是,当我删除了初始化新GroupType的Group构造函数后,事情开始正常工作。
你能解释一下这种行为吗?注意:同样的场景在NHibernate中也可以正常工作。
感谢您的回复。
我认为你必须删除Group构造函数中的初始化逻辑:
GroupType = new GroupType();
这可能会覆盖加载的数据,或者甚至不加载它(因为它已经被实例化了),导致GroupType属性是您初始化它时使用的实例,而不是数据库中的实例。
可能和这里解释的是一样的问题