類型'Company.Model.User'和類型'Company.Core.Model.User'都具有相同的簡單名稱'User',因此不能在同一模型中使用

ef-code-first entity entity-framework entity-framework-6 inheritance

我有一個基本實體類MyCompany.Core.Model.User ,它將用於User實體的公共屬性:

public class User
{
    public string Username { get; set; }
    public string Usercode { get; set; }
}

我還有一個基本映射類MyCompany.Core.Model.UserMap來設置基本User類的代碼第一個映射:

public class User
{
    public string Username { get; set; }
    public string Usercode { get; set; }
}

在一個單獨的程序MyCompany.Model.User ,我有一個派生類MyCompany.Model.User ,它繼MyCompany.Model.UserUser ,並使用一些其他屬性擴展它:

public class User
{
    public string Username { get; set; }
    public string Usercode { get; set; }
}

另外,我有一個派生的映射類MyCompany.Model.UserMap來為其他屬性提供額外的配置:

public class User
{
    public string Username { get; set; }
    public string Usercode { get; set; }
}

但是,當將MyCompany.Model.User添加到上下文並註冊MyCompany.Model.UserMap我收到以下錯誤:

類型“MyCompany.Model.User”和類型“MyCompany.Core.Model.User”都具有相同的簡單名稱“User”,因此不能在同一模型中使用。給定模型中的所有類型都必須具有唯一的簡單名稱。使用“NotMappedAttribute”或在Code First Fluent API中調用Ignore,以從模型中明確排除屬性或類型。

鏈接表示您不能在模型中使用相同的“簡單名稱”兩次。

為什麼在模型中註冊了基類“簡單名稱”,為了實現這種實體繼承,有沒有辦法繞過它?

我懷疑簡單的解決方案是重命名派生類;但是我寧願避免這種情況,因為在多個上下文中可能有很多派生。

注意:使用Entity Framework 6.0.0-rc1(預發行版)

一般承認的答案

這是我在2012年報告的EF的限制https://entityframework.codeplex.com/workitem/483 ,但仍未在6.0.2中實現。 EF使用扁平內部體系結構,無法識別名稱空間。可能會進入EF7而不是之前。目前唯一的解決方案是將兩個類重命名為唯一的類名,而不管它們所在的命名空間。恕我直言,這是EF中的一個重要限制。只需考慮一個名為Category的類,以及可以在域內使用多少個不同的命名空間。


熱門答案

首先閱讀表類型映射

首先需要理解分層實現模型選項。然後查看IGNORE選項。根據所選擇的方法,您可能需要也可能不需要。
要求忽略???

modelBuilder.Ignore<BaseXYZ>()

Ef目前正在嘗試包含您的基類,以支持從NON抽像類繼承的包含的Type。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因