实体框架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中也可以正常工作。

感谢您的回复。

实体框架6.1 -代码优先-引用属性不能正确加载

我认为你必须删除Group构造函数中的初始化逻辑:

 GroupType = new GroupType();

这可能会覆盖加载的数据,或者甚至不加载它(因为它已经被实例化了),导致GroupType属性是您初始化它时使用的实例,而不是数据库中的实例。

可能和这里解释的是一样的问题

相关文章: