我正在使用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
我不想编译两次对模型和代码进行更改的项目,因为逻辑仍然相同但字段名称发生了变化。我也不想保留两个版本。
是否可以动态使用两种不同的模型,具体取决于要连接的数据库?
答案 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());
}