2014-06-29 58 views
1

如果我有一個實體:太多的導航性能可太多

public class User 
{ 
    public int UserId{get;set;} 
} 

並形成其他單位:

public class Role 
{ 
    public int RoleId{get;set} 
} 

我想通過EF代碼第一次到關係船模,所以我說:

User.cs

public virtual ICollection<Role> Roles {get;set;} 

Role.cs

public virtual User User {get;set;} 

這讓我獲得用戶角色,如:

context.Users.Roles.ToList(); 

User是數據庫的主要對象。它可以與100個表格關聯。

正在添加ICollection<T>User對象的最佳做法或它並不總是必需的(通常有一些經驗法則)?

有時我覺得我正在創建太大的對象,我想知道這是否會對性能產生影響?

+0

角色ID應在用戶表中,此用戶具有此角色 –

+0

完全依賴於您正在建模的數據 – joelmdev

回答

0

您認爲將100個相關表格拖放到您的dbcontext可能不是最高性能的解決方案,並且ef將拖動所有可以看作dbset,導航屬性或流暢配置的表格。

但是,如果您需要在您的dbcontext中從角色導航到用戶,並且用戶實體具有指向100個表的導航屬性,那麼您的解決方案將在此特定dbcontext中告訴ef忽略您不是的表關注類似modelbuilder.ignore('orders')的東西,假設用戶可以通過某種方式導航到訂單。通過這種方式,可以修剪圖形以僅考慮您需要的實體。

然後,您需要另一個dbcontext用於其他感興趣的領域:該概念被稱爲有界上下文。 (Ref Julie Lerman,Eric Evans DDD)然後,您需要在應用中做更多的工作來支持同一應用中的多個數據庫上下文,但可以完成 - (請參閱企業級別的Julie Lerman)但是,如果您只需要一個dbcontext你的應用程序在你的模型的範圍被限制在一個表的子集,然後這將工作。

我認爲您可以使用ef power工具查看dbcontext模型中表的只讀圖。然後你可以確認你的修剪進行得如何。