2012-11-17 134 views
0

鑑於此代碼第一個數據模型共享密鑰,如何將我配置或實現對Product實體LocalizedName導航屬性,使用上Product實例LocalNameKey屬性的關鍵之一,而_languageId從上下文中作爲其他關鍵?導航屬性與EF代碼第一

public class SampleDataContext : DbContext 
{ 
    int _languageId; 

    public SampleDataContext(int languageId) 
    { 
     _languageId = languageId; 
    } 

    public DbSet<LocalizedName> LocalNames { get; set; } 
    public DbSet<Product> Products { get; set; } 
    public DbSet<Language> Languages { get; set; } 
} 

public class LocalizedName 
{ 
    [Key, Column(Order = 0)] 
    public Guid Key { get; set; } 

    [Key, Column(Order = 1)] 
    public int LanguageId { get; set; } 

    public string Name { get; set; } 
} 

public class Language 
{  
    public int Id { get; set; } 
    public string Name{ get; set; } 
} 

public class Product 
{ 
    public int Id { get; set; } 
    public string Sku { get; set; } 
    public Guid LocalNameKey { get; set; } 
} 

回答

0

不,你不能。如果你嘗試,EF會嘗試創建一個與上下文相對應的表,並可能試圖阻塞。

您必須使用存儲庫模式以確保任何本地化實體上的查詢也包含語言ID(可以封裝在存儲庫中,而不是上下文中)。另外,讓FK對實體的每個單獨屬性進行本地化的條目可能會在性能方面非常苛刻。請參閱this Q&A獲取一些好的提示(不僅僅是接受的答案)。

+0

好吧,我想我明白爲什麼這是不可能的。感謝關於本地化數據的負責人。 –