C#实体框架6-如何处理具有相同表名的多个模式

C#实体框架6-如何处理具有相同表名的多个模式,c#,entity-framework,ef-database-first,C#,Entity Framework,Ef Database First,我使用的是C#Entity Framework 6,我有一个具有多个模式的数据库,在这些模式中我有同名的表。例如: 价格。酒店 酒店 我的所有数据库对象都有一个项目,其结构如下: Project Name = Storm.API.Data In this project I have folders with the schema names: "Availability", "Rates". In each folder I have the proper 'edmx' file. 当我运行

我使用的是C#Entity Framework 6,我有一个具有多个模式的数据库,在这些模式中我有同名的表。例如:

  • 价格。酒店
  • 酒店
  • 我的所有数据库对象都有一个项目,其结构如下:

    Project Name = Storm.API.Data
    In this project I have folders with the schema names: "Availability", "Rates".
    In each folder I have the proper 'edmx' file.
    
    当我运行项目时,出现以下错误:

    Schema specified is not valid. Errors: 
    
    The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM 
    type 'Hotel'. Previously found CLR type 'Storm.API.Data.Rates.Hotel', 
    newly found CLR type 'Storm.API.Data.Availability.Hotel'.
    
    我提出的唯一解决方案是将模式分离到不同的项目中,但是因为我有两个以上的模式,所以我不想为此创建这么多的项目

    是否有另一种解决方案可以使我在同一个项目下拥有所有架构而不会出现此错误?

    您可以:

  • 在代码中为每个类指定不同的类名
  • 使用2个不同的DbContext类,为实体使用不同的命名空间。你是否把它放在另一个项目中取决于你,但不是必需的
  • 不确定这是否可行,但值得一试:为每个模式创建一个名称空间,并将所有内容都放在db1上下文中

  • 可以在模型浏览器上编辑每个架构的实体类型名称。因此,您有Availability\u Hotel on Availability schema和Rates\u Hotel on Rates schema类型。我认为有单独的项目是一个很好的解决方案,因为有不同的模式定义您的域,最好通过有单独的项目来明确此域分离。1。在自动生成的代码上手动更改类名是个坏主意,因为在更新模型时类名将丢失。2.在同一个数据库中使用2 DbContext不起作用。3.这是我一开始做的。