我已經注意到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?你是否將它與集合導航屬性相混淆?那些在構造函數中實例化的,但單數的引用導航屬性不應該。 –