【问题标题】:Entity Framework - Already Defined实体框架 - 已定义
【发布时间】:2011-10-12 01:40:57
【问题描述】:

我遇到了一个以前从未遇到过的 EDMX 文件问题。当站点正在运行或我正在调试时,似乎是随机的,EF 会爆炸并抱怨一切都被重新定义了。我每次都必须重新启动应用程序池并重新附加调试器,然后从我离开的地方重新开始,然后它会再次工作,直到下一次它被炸毁。

我已经用不同的名称重新创建了 EDMX,因此 MyAppEntities*1*

错误是:

Error: Schema specified is not valid. Errors: App_Code.Fck.csdl(3,4) : 
error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'MyAppEntities1' is already defined. App_Code.Fck.csdl(69,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.AdSection' was already defined. App_Code.Fck.csdl(79,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.AgeRating' was already defined. App_Code.Fck.csdl(89,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Comment' was already defined. App_Code.Fck.csdl(101,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.ContentImage' was already defined. App_Code.Fck.csdl(115,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.ContentVideo' was already defined. App_Code.Fck.csdl(126,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FeaturePlan' was already defined. App_Code.Fck.csdl(142,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Flick' was already defined. App_Code.Fck.csdl(165,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Gallery' was already defined. App_Code.Fck.csdl(184,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Genre' was already defined. App_Code.Fck.csdl(197,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Like' was already defined. App_Code.Fck.csdl(208,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Meta' was already defined. App_Code.Fck.csdl(216,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Payment' was already defined. App_Code.Fck.csdl(236,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.StatusUpdate' was already defined. App_Code.Fck.csdl(246,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.UserProfile' was already defined. App_Code.Fck.csdl(277,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_FeaturePlans_AdSections' was already defined. App_Code.Fck.csdl(289,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Flicks_AgeRatings' was already defined. App_Code.Fck.csdl(301,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Comments_Users' was already defined. App_Code.Fck.csdl(313,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Payments_FeaturePlans' was already defined. App_Code.Fck.csdl(325,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Flicks_Users' was already defined. App_Code.Fck.csdl(337,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Genres_Genres' was already defined. App_Code.Fck.csdl(349,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Likes_Users' was already defined. App_Code.Fck.csdl(361,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Payments_Users' was already defined. App_Code.Fck.csdl(373,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_StatusUpdates_Users' was already defined. App_Code.Fck.csdl(385,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FlickGenres' was already defined. App_Code.Fck.csdl(389,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.User' was already defined. App_Code.Fck.csdl(401,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Users_be_Users' was already defined. App_Code.Fck.csdl(413,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.ContentImageSet' was already defined. App_Code.Fck.csdl(426,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_ContentImages_ContentImageSets' was already defined.

【问题讨论】:

标签: c# .net entity-framework entity-framework-4 edmx


【解决方案1】:

您可能会更改包含该模型的项目的程序集名称。

对原始程序集的引用仍在客户端应用程序中。

ASP.net 网络应用程序: - 手动删除dll和pdb文件。

ASP.net 网站: - 执行 IIS 重置,然后清除其中的 asp.net 临时文件 文件夹 C:\windows\microsoft.net\your framework version\temp asp.net 文件\

【讨论】:

  • 这是一个标准的 ASP.NET 网站,不是应用程序,因此没有编译的 bin 目录。
  • 这解决了我的问题——我将我的 dll 部署到 GAC 但忘记将其从 bin 目录中删除
  • 要重置 IIS,在管理员模式下运行 CMD 并运行“iisreset -restart”。我的临时 asp 文件位于 C:\Users\MyUsername\AppData\Local\Temp\Temporary ASP.NET Files
  • 是的,我必须清除我的 bin 文件夹。对我来说,在部署到服务器 2003 站点时出现此错误。我重命名了一个项目,旧程序集 (.dll) 就在那里。由于连接字符串以“res://*;...”开头,它在所有程序集(甚至未加载的程序集)中搜索资源并找到重复项(显然)。
  • 这就是我对这类工作的全部看法。如果不搜索 StackOverflow 或浪费数小时的时间,任何人都应该如何解决这类问题?我自己也遇到了这个问题,令人失望的事实是,上面的答案实际上是解决方案。非常感谢 Damith,但是如果没有这个答案,我会感到难以置信。
【解决方案2】:

我遇到了同样的错误。这是关于 dll 的问题,在我的情况下是重复的 dll。

【讨论】:

    【解决方案3】:

    如果问题还没有解决,请尝试修改web.config中的连接字符串。

    在我的情况下,我更改了 connectionString

    来自

    <add name="StudentRegistrationDB" connectionString="metadata=res://*/App_Code.EFDataModel.StudentReg.csdl|res://*/App_Code.EFDataModel.StudentReg.ssdl|res://*/App_Code.EFDataModel.StudentReg.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=StudentRegistration;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    收件人:

     <add name="StudentRegistrationDB" connectionString="metadata=res://App_Code.EFDataModel2.StudentRegDB.csdl|res://App_Code.EFDataModel2.StudentRegDB.ssdl|res://App_Code.EFDataModel2.StudentRegDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=StudentRegistration;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    

    请注意,元数据中的“星号”已被删除,因此元数据指向绝对位置。因为'明星' EF 到处搜索。因此可能会遇到重复

    注意:这是一个简单的修复,这意味着您不会清除任何重复数据,这不是一个好主意。最好的方法是按照先前答案的建议删除重复的 .pdb/.dll 文件。

    【讨论】:

      【解决方案4】:

      我在使用不同的解决方案时遇到了同样的问题,我有两个项目使用实体框架,具有相同名称的相同数据库的模型,在两个模型上添加的所有表在内部异常消息中,解决方案是重命名其中一个模型

      【讨论】:

      • 令人难以置信的是,这也是对我有用的解决方案。我惊呆了。我在同一个解决方案中有两个项目,它们都将模型命名为“EISContext”。每次运行时异常,直到我将其中一个项目中的模型名称更改为“BatchEISContext”。
      【解决方案5】:

      我在处理允许动态加载子应用程序集而不需要重新启动整个应用程序的过程时遇到了这个问题。我正在使用带有 DbContext 的 EF 5.0。我的解决方法是:

      1. 更改实体容器名称,使其反映程序集版本,例如CustomerEntities_1_0_7_0 并保存 edmx。
      2. 手动修改上下文删除版本后缀:

        public partial class CustomersEntities : DbContext
        {
        public CustomersEntities() : base("name=CustomersEntities")
        
      3. 同样手动修改 app.config。

      【讨论】:

        【解决方案6】:

        我也遇到了同样的问题。实体框架生成的文件不能位于 App_Code 文件夹中。我的意思是 EDMX 文件。

        我敢打赌,您遇到了无法引用文件的错误,因此您检查了从 Content 到 Compile 的属性。这解决了 VS 错误,但创建了双实例 - 预编译一个和运行时编译。

        解决方案是让它远离 App_code 文件夹,因为它是仅用于代码的特殊文件夹。

        【讨论】:

          【解决方案7】:

          就我而言,删除模型并使用新名称创建它解决了这个问题

          【讨论】:

            【解决方案8】:

            我最近遇到了这个异常,解决这个问题的方法是删除旧的 DLL 或在解决方案 Bin 文件夹中引用的重复 DLL。这完全解决了我的问题。

            【讨论】:

            • 在我的情况下,我将一个项目移动到另一个解决方案中并重命名了该项目。旧项目名称的 dll 从未在 bin 文件夹中删除。这引起了冲突。从 bin 中删除旧项目名称 dll 解决了该问题。
            【解决方案9】:

            挖了2天终于找到了问题的原因。我有 2 个 dll(数据库应用程序)指向同一个项目中的同一个实体框架数据库。简而言之,它有一个数据库的重复 dll。删除无关的dll后,它开始正常工作。

            【讨论】:

              【解决方案10】:

              在发布模式下清理、重建、部署。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-10-03
                • 2010-09-07
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多