2015-09-04 50 views
1

我們有一個有趣的要求,即許多帶有文本的表格必須以用戶爲其安裝配置的所有語言提供這些值(並且我們不支持從右到左的文字)。這是一個帶有Entity Framework的ASP.NET MVC Web應用程序。使用相同/相似模式和實體框架處理多個表格

通常,這些是客戶管理的查找/下拉列表中,他們需要能夠查看各種屏幕,並選擇顯示哪個語言(我甚至不談論標籤文本還)

我在哪裏倒是通常有表的一堆(數十名在這種情況下),用這個佈局:

ID int PK, 
Display nvarchar(100), 
<other stuff> 

現在我有2個表:

Master Table 
ID int PK, 
<other stuff> 

Language Table 
ID int PK FK to corresponding master table 
LangID int PK FK to table of implements languages 
Display nvarchar(100) 

說我有3種語言和一個選項A表4行,我結束了: 選項A - 4行 選項A_L - 12行

...然後我有~60這些表對。

所有* _L表具有相同的核心列(上面),有些可能會有額外的文本列(備註,備用名稱等)。

首先,* _L的概念不是刻在石頭上的 - 這正是我迄今爲止提出的。

其次,我們使用實體框架6,數據庫優先。如果我們只是構建SQL語句,並且可以用文本替換表名,那麼這些表就相當容易處理。我看到你可以通過EF來執行SQL,但它是有限的,在這裏沒有幫助。另外,我寧願做一些更優雅的事情。我認爲一個通用的界面會有所幫助,但我還沒有弄清楚。所以我有很多重複的代碼和一些巨大的開關語句。

那麼,具體有:

  1. 是架構/ * _大號計劃是否合理? (要求的合理性放在一邊!)

  2. 我的SQL2008/2012知識很膚淺 - 表和列等。它的XML或CLR支持是否以任何方式幫助我?

  3. 看來我應該能夠利用一個接口或泛型 - 但在EF數據上下文中這樣做並不能解決我的問題。這裏的任何想法?

回答

0

看來想要Table Per Type

我經常用一個抽象基類的標識列添加到每個表。

public abstract class BasicBo 
{ 
    public virtual int Id {get;set; 
} 

public class Thing :BasicBo 
{ 
    // other properties. 
} 

public class MyDbContext(string connectionString) : base(connectionString) 
{ 
    public DbSet<Thing> Things { get;set;} 
    // etc 
} 
+0

我們最終改變了設計,但這也可能有幫助。 謝謝 – HoltDan

相關問題