C# 是否可以根据数据库结构使用两种模型?
首先,我将winforms和EF与数据库一起使用。该应用程序连接到由另一个外部应用程序创建的数据库,并且已知它可以有两个不同的变体C# 是否可以根据数据库结构使用两种模型?,c#,.net,entity-framework,C#,.net,Entity Framework,首先,我将winforms和EF与数据库一起使用。该应用程序连接到由另一个外部应用程序创建的数据库,并且已知它可以有两个不同的变体 Different table name: car | CAR -------- | --------- Id | Id Different field: car_d
Different table name: car | CAR
-------- | ---------
Id | Id
Different field: car_description | CAR_DESCRIPT
Different field: car_name | car_NAME
因此,用于其中两个的代码如下所示:
context.car.car_description
或
我不想编译两次对模型和代码进行更改的项目,因为逻辑仍然相同,但字段名会更改。我也不想保留两个版本
是否可以根据数据库动态使用两种不同的模型进行连接?我通常会为所有关于汽车的逻辑和推理定义一个基本汽车类 然后我将构造扩展该Car类的db1Car和db2Car类,并实现其成员
或者改变顺序,采用更自上而下的方法:创建两个模型,在最低级别上,使其继承自BaseCar,并将逻辑和推理移到业务逻辑级别。如果模型优先是您唯一的选择,您可以定义两个生成相同实体对象的EDMX模型——数据库字段的名称不必与类的名称匹配,您可以告诉EF以不同的方式映射它们。从这里开始,您可以使用不同的连接字符串来生成不同的概念模型,但是类定义是相同的。我从来没有试过,但理论上它应该有用 如果选择更改为代码优先,则可以通过使用Fluent API和单独的映射类来配置代码优先实体来实现此目标。在您的
DbContext
中,您可以覆盖您的OnModelCreating
,您可以执行以下操作:
if ( usingSchema1 )
{
modelBuilder.Configurations.Add(new Entity1Schema1Map());
}
else
{
modelBuilder.Configurations.Add(new Entity1Schema2Map());
}
你看过吗?
if ( usingSchema1 )
{
modelBuilder.Configurations.Add(new Entity1Schema1Map());
}
else
{
modelBuilder.Configurations.Add(new Entity1Schema2Map());
}