我在VS2013中遇到EF6的问题。我必须在Web应用程序项目中修改数据库优先模型的连接字符串,因此我按照How should I edit an Entity Framework connection string?的最佳答案中的建议,并从我的Web.Config文件中删除它。 起初它似乎工作正常,我删除了连接字符串,然后从实体设计器我运行“从数据库更新模型”,重新创建连接字符串,但然后我的构建失败,多个错误类似于:
Public Sub New() has multiple definitions with identical signatures
经过一番挖掘后,我发现当我重新创建连接字符串时,EF创建了第二个名为Model.Context1.vb的Model.Context.vb文件,并且两者仍在某处引用。从那时起,我打开了包含我的EF模型的文件夹中的每个文件,记事本搜索对Context.vb或Context1.vb的引用,并且显示为空,如果我删除任一文件,我的构建失败,说明文件无法找到,作为一种解决方法,我打开了Context.vb文件并删除了所有代码,因此没有重复项,我想通过删除对该文件的引用来正确修复它,如果有人知道我怎么能这样做
答案 0 :(得分:1)
我把它整理好了,在尝试从源代码控制中恢复旧版本的EF文件并仍然遇到同样的问题后,我意识到引用可能是在一个项目文件中。
在[projectName] .vbproj中我找到了这两个条目:
<Compile Include="Data\schedulerModel.Context1.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>schedulerModel.Context.tt</DependentUpon>
</Compile>
<Content Include="Data\schedulerModel.Context.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<DependentUpon>schedulerModel.edmx</DependentUpon>
<LastGenOutput>schedulerModel.Context1.vb</LastGenOutput>
</Content>
我删除了第一个,并从第二个中的context.vb文件中删除了1,打开了项目并运行了一个没有问题的重建。
答案 1 :(得分:0)
我遇到了同样的问题,但分辨率略有不同。无论出于何种原因,更新edmx文件一次似乎从项目文件中删除了一条看似很重要的行,即行<LastGenOutput>MyEntityModel.Context.cs</LastGenOutput>
。
我将该行重新添加到我的项目文件中,更新模型并没有导致任何更多的重复上下文文件。修复后整个块看起来如下:
<Content Include="MyEntityModel.Context.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<DependentUpon>MyEntityModel.edmx</DependentUpon
<LastGenOutput>MyEntityModel.Context.cs</LastGenOutput>
</Content>
答案 2 :(得分:0)
以为我会把我的发现添加到这里,因为它让我分心几周 - 每次我从数据库更新我的模型,我得到“重复”的上下文,设计师文件等,然后数百个错误。然而,新的sp或表或我添加的任何东西只出现在新的“context1”文件中,而不是原件中,所以当我把它卷回来时我必须再次经历相同的过程等等。
当我想到时,最后一盏灯继续亮起......来源控制!我使用TFS,我发现除非在执行Update之前检出所有与模型相关的文件,所以这是Context,Designer和Service文件,然后EF生成几乎所有内容的新版本,大概是因为它无法修改其中一个由于源代码控制而成为只读的文件。
然后关键是修复项目文件,如上面的答案中所述,然后检查所有内容,然后进行更新。如果你没有在proj文件中获得该标记,那么即使所有内容都已检出,它也会再次出错。
希望这会有所帮助 - 无论如何,我的理智正在慢慢回归。
阿德