是否可以根据数据库结构使用两个模型?

时间:2014-08-02 14:16:12

标签: c# .net entity-framework

我正在使用winforms和EF与数据库的第一个方法。应用程序连接到由另一个外部应用程序创建的数据库,并且已知它可以有两种不同的变体。

Different table name:   car                 | CAR
                        --------            | ---------
                        Id                  | Id
Different field:        car_description     | CAR_DESCRIPT
Different field:        car_name            | car_NAME

因此,用于其中两个的代码将是例如:

context.car.car_description

context.CAR.CAR_DESCRIPT

我不想编译两次对模型和代码进行更改的项目,因为逻辑仍然相同但字段名称发生了变化。我也不想保留两个版本。

是否可以动态使用两种不同的模型,具体取决于要连接的数据库?

2 个答案:

答案 0 :(得分:1)

我通常会为你所有关于汽车的逻辑和推理定义一个基础Car类。

然后我将构建扩展该Car类的db1Car和db2Car类,并实现其成员。

或者改变顺序以获得更自上而下的方法:创建两个模型,并在最低级别上,使其从BaseCar继承,并在那里以业务逻辑级别移动逻辑和推理。

答案 1 :(得分:1)

如果模型优先是您唯一的选择,您可以定义两个生成相同实体对象的EDMX模型 - 数据库字段的名称不必与您的类名称匹配,您可以告诉EF以不同方式映射它们。从那里,您可以使用不同的连接字符串来生成不同的概念模型,但类定义将是相同的。我从来没有尝试过,但理论上它应该有用。

如果更改为Code First是一个选项,则可以通过使用Fluent API和单独的映射类来配置代码优先实体来实现此目标。在DbContext,您可以覆盖OnModelCreating,您可以执行以下操作:

if ( usingSchema1 )
{
    modelBuilder.Configurations.Add(new Entity1Schema1Map());
}
else
{
    modelBuilder.Configurations.Add(new Entity1Schema2Map());
}