Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以根据数据库结构使用两种模型?_C#_.net_Entity Framework - Fatal编程技术网

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

C# 是否可以根据数据库结构使用两种模型?,c#,.net,entity-framework,C#,.net,Entity Framework,首先,我将winforms和EF与数据库一起使用。该应用程序连接到由另一个外部应用程序创建的数据库,并且已知它可以有两个不同的变体 Different table name: car | CAR -------- | --------- Id | Id Different field: car_d

首先,我将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

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


是否可以根据数据库动态使用两种不同的模型进行连接?

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

然后我将构造扩展该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());
}