Sql server 处理具有相同/相似模式和实体框架的多个表

Sql server 处理具有相同/相似模式和实体框架的多个表,sql-server,entity-framework-6,schema,Sql Server,Entity Framework 6,Schema,我们有一个有趣的需求,即许多带有文本的表必须以用户为其安装配置的所有语言提供这些值(我们不支持从右到左的文本)。这是一个带有实体框架的ASP.NET MVC web应用程序 通常,这些是客户端管理的查找/下拉列表,它们需要能够查看各种屏幕并选择显示哪种语言(我甚至还没有谈论标签文本) 我通常会有一堆(本例中有几十个)具有这种布局的表: ID int PK, Display nvarchar(100), <other stuff> ID int PK, 显示nvarchar(100)

我们有一个有趣的需求,即许多带有文本的表必须以用户为其安装配置的所有语言提供这些值(我们不支持从右到左的文本)。这是一个带有实体框架的ASP.NET MVC web应用程序

通常,这些是客户端管理的查找/下拉列表,它们需要能够查看各种屏幕并选择显示哪种语言(我甚至还没有谈论标签文本)

我通常会有一堆(本例中有几十个)具有这种布局的表:

ID int PK,
Display nvarchar(100),
<other stuff>
ID int PK,
显示nvarchar(100),
我现在有两张桌子:

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)
主表
ID int PK,
语言表
ID int PK FK到相应的主表
LangID int PK FK到语言表
显示nvarchar(100)
假设我有3种语言和一个选项一个有4行的表,我最终得到: 选项A-4行 选项A_L-12行

。。。然后我得到了大约60对桌子

所有*_L表都有相同的核心列(如上所述),有些表可能有额外的文本列(注释、备用名称等)

首先,这个概念不是刻在石头上的——这正是我迄今为止提出的

其次,我们使用实体框架6,首先是数据库。如果我们只是构建SQL语句,并且可以用文本替换表名,那么这些表将非常容易处理。我看到您可以通过EF执行SQL,但它是有限的,在这里没有帮助。另外,我宁愿做些更优雅的事情。我认为一个通用的接口会有所帮助,但我还没有弄清楚如何使用。所以我有很多重复的代码和一些巨大的switch语句

因此,具体而言:

  • 模式/*\L计划是否合理?(撇开要求的合理性不谈!)

  • 我的SQL2008/2012知识相当肤浅——表和列等等。它的XML或CLR支持对我有帮助吗

  • 看起来我确实应该能够利用接口或泛型,但在EF数据上下文中这样做让我感到困惑。有什么想法吗

  • 看来你想要

    我经常使用抽象基类将Id列添加到每个表中

    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
    } 
    
    公共抽象类BasicBo
    {
    公共虚拟int Id{get;set;
    }
    公共类事物:BasicBo
    {
    //其他财产。
    }
    公共类MyDbContext(string connectionString):基(connectionString)
    {
    公共DbSet Things{get;set;}
    //等
    } 
    
    似乎您想要

    我经常使用抽象基类将Id列添加到每个表中

    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
    } 
    
    公共抽象类BasicBo
    {
    公共虚拟int Id{get;set;
    }
    公共类事物:BasicBo
    {
    //其他财产。
    }
    公共类MyDbContext(string connectionString):基(connectionString)
    {
    公共DbSet Things{get;set;}
    //等
    } 
    
    我们最终改变了设计,但这可能也有帮助。谢谢我们最终改变了设计,但这可能也有帮助。谢谢