【问题标题】:Entity Framework Multiple EDMX file sharing same tables实体框架多个 EDMX 文件共享相同的表
【发布时间】:2015-11-12 05:52:02
【问题描述】:

环境:EF 6,SQL 2012

设置:数据库优先,禁用延迟加载

这个问题可能看起来更笼统,但会尽量以最好的方式解释它。

我有一个使用 ASP.NET MVC 的大型应用程序,并根据逻辑功能对实体进行分组。因此我们构建了多个 EDMX 文件

在某些情况下,我们必须在两个 EDMX 文件中使用相似的实体。

SchoolTeachersStudents 有关系。在第一个EDMX 文件中,我使用了schoolTeachers。在第二个EDMX 文件中,我使用了schoolstudents

但只有一个实体类被创建。如果我在第二个 EDMX 上下文文件上运行自定义工具,那么我的第一个 edmx 上的 entity(school.cs) 会消失并出现在第二个 ..

  • 为什么会出现这种奇怪的行为?

这是我的第一个 EDMX 文件中的代码

正如您在此处看到的,我没有访问school 实体,并且我还禁用了延迟加载。但它抱怨它找不到school 文件。注意:课程具有到学校的导航属性。但我没有把它包括在这里.. 为什么会这样?

 var courses= DB.courses
                                        .AsNoTracking()
                                        .Select(e =>
                                            new CourseDTO()
                                            {
                                                CourseID= e.CourseID,
                                                Name= e.CourseName,
                                                Desc= e.Desc,
                                                isActive= e.isActive
                                            })
                                        .OrderBy(e => e.CourseID);

问题是,我只能在 EDMX 文件中包含一个实体。 在第一个 EDMX 中,它具有教师的导航属性 在第二个 EDMX 中,它具有与学生相关的导航属性。但一次只存在实体文件。只有一个实体文件,代码会中断 注意:这只是示例......不是我的原始应用程序

【问题讨论】:

  • 重命名 edmx 文件之一中的实体名称,例如 TeacherSchool
  • @GertArnold,我更新了对我有用的解决方案。但如果有任何错误,请帮我解决......

标签: entity-framework-6 entity


【解决方案1】:

感谢@GertArnold。同时,我尝试创建文件夹并将 EDMX 文件保存在其中。意味着我为每个逻辑组创建了单独的文件夹,然后在其中包含了 edmx 文件。这反过来又使 edmx 文件实体具有不同的名称空间(我的意思是实体类),并且它还允许在多个 EDMX 文件中拥有相同的实体。听起来我的问题已经解决了。

我没有尝试将它们包含在不同的命名空间下。整个想法开始于我意识到即使我有两个 EDMX 文件,关联的实体(.csfiles)也是在同一个物理位置创建的。我尝试创建子文件夹并包含 EDMX 文件。它解决了问题,我发现它有不同的名称空间

:):)

【讨论】:

  • 我认为这些类仍然应该有不同的名称,因为 EF 在发现实体类型时会忽略(或现在忽略?)命名空间。
  • @GertArnold。到目前为止,Gert 很好。我正在从两个 EDMX 文件访问实体并且没有遇到任何问题。我不准备更改实体名称的原因是,当我进行刷新时,名称更改会恢复
  • 不,更改后的类名不会被更新恢复。
  • @GertArnold .. 最后一个问题,我正在使用数据库优先方法...我在实体类的构造函数中禁用延迟加载,并且每次都恢复它,当我从 DB 进行模型更新时......如何我们可以阻止它.. 对于您的名称更改,我确信实体名称将被还原,一旦从 DB 更新.. 这是自动生成的代码 // // 此代码是从模板生成的。 // // 手动更改此文件可能会导致您的应用程序出现意外行为。 // 如果重新生成代码,将覆盖对该文件的手动更改。//
  • 对我不起作用,实体框架 6 忽略命名空间
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多