【问题标题】:Dealing with Many Tables with Identical/Similar Schemas AND Entity Framework使用相同/相似的模式和实体框架处理许多表
【发布时间】:2015-12-01 00:01:48
【问题描述】:

我们有一个有趣的要求,即许多带有文本的表格必须以用户为其安装配置的所有语言提供这些值(我们不支持从右到左的文本)。这是一个带有实体框架的 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 种语言和一个 4 行的 OptionA 表,我最终得到: 选项A - 4 行 OptionA_L - 12 行

...然后我有大约 60 个这样的桌子对。

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

首先,*_L 的概念并不是一成不变的——这只是我迄今为止想出的。

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

所以,具体来说:

  1. schema/*_L 计划是否合理? (抛开要求的合理性!)

  2. 我的 SQL2008/2012 知识非常肤浅 - 表和列等。它的 XML 或 CLR 支持对我有什么帮助吗?

  3. 看起来我应该能够利用接口或泛型 - 但在 EF 数据上下文的上下文中这样做让我望而却步。这里有什么想法吗?

【问题讨论】:

    标签: sql-server entity-framework-6 schema


    【解决方案1】:

    看来你想要Table Per Type

    我经常使用抽象基类给每个表添加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
    } 
    

    【讨论】:

    • 我们最终改变了设计,但这也可能有所帮助。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多