.net 在entity framework 5中将代码生成从无更改为默认后出现错误
我有一个wpf项目4.5,我正在使用EF5生成模型类。我想为EF类实现iNotifyPropertyChanged。因此,我在设计器(visual studio 2012)中右键单击,并将代码生成设置从“无”更改为“默认” 一旦我这样做了,我就得到了数百个错误,如下所示: 错误67“ColumnType”中的公共属性“TableColumnName”具有多个 具有相同签名的定义 [编辑1] 这些错误都被抛出到DataModel.Designer.Vb文件中。它们出现在与另一个表中的列/导航属性同名的任何表列属性或导航属性上。我发现很难相信我不能在不同的表中使用相同名称的列,这里肯定发生了其他事情 [编辑2] 因此,我从设计器中删除了所有数据库对象,然后将代码生成策略更改为默认值,然后在图表中添加了一个表(客户机)。对于表的每个属性,我都会遇到很多错误(所以这一定不是因为其他表的列名与我之前认为的相同)。我在每个属性(表列)上都会出现上面列出的错误,并且每个属性都会出现以下错误: 错误变量“\u ColumnName”与成员隐式冲突 为类中的属性“ColumnName”声明 “客户”。C:…\FTC_DAL.Designer.vb 当我将代码生成返回到none时,这种情况就会消失。我开始认为这是EF5中的一个bug [编辑3] 复制步骤:.net 在entity framework 5中将代码生成从无更改为默认后出现错误,.net,visual-studio,entity-framework,entity-framework-5,.net,Visual Studio,Entity Framework,Entity Framework 5,我有一个wpf项目4.5,我正在使用EF5生成模型类。我想为EF类实现iNotifyPropertyChanged。因此,我在设计器(visual studio 2012)中右键单击,并将代码生成设置从“无”更改为“默认” 一旦我这样做了,我就得到了数百个错误,如下所示: 错误67“ColumnType”中的公共属性“TableColumnName”具有多个 具有相同签名的定义 [编辑1] 这些错误都被抛出到DataModel.Designer.Vb文件中。它们出现在与另一个表中的列/导航属性同
它可以是vb或c,我测试了两者
- visual studio 2012 pro v.11.0.51106.01更新1
- .NET 4.5.50709
- Windows8Pro
谢谢,将代码生成策略设置为“无”是正确的,您应该保持这种状态 当您将其更改为“Default”时,您将获得模型中所有实体的类。但是,您已经从
.tt
模板中获得了相同的类。结果,你得到了所有的班级成员两次
为了更改类的生成方式,仍然将代码生成策略保留为“无”,因为默认代码生成无论如何都不可自定义。
Model.tt
文件可以自由修改以满足您的需要,修改该文件以使您的类实现您想要的任何接口不需要花费太多精力。请参考以下链接。我花了很多时间对这个问题感到沮丧,并从“添加域服务类”屏幕上的链接中找到了这篇支持文章,该链接显示在“一些。。。可能丢失了“
观察结果的总结是WCF RIA不支持DBContext(由.tt文件指示)。要使用域服务类,需要ObjectContext类。这是来自政府的决议
为了将实体框架模型与WCF RIA服务结合使用,必须将其转换为基于“ObjectContext”的模型。这可以通过以下步骤完成:
谢谢你的回复。我理解你的意思,所以我尝试删除model.tt文件,看看这是否解决了错误。事实并非如此,即使类仅在model.designer.vb文件中声明,错误仍然存在。至于将策略保留为“无”,我之所以更改它,是因为我试图在用户输入每个属性/文本框的数据时向用户提供数据验证。我使用数据库/模型首先与EF 5和我有困难完成这一点。我发现的所有示例都是代码优先,人们在其中创建自己的propertychangedevents。空间不足,继续:使用model first,类没有内置propertychanged事件,我试图通过更改代码生成来实现这一点。我意识到这并不理想,但我真的找不到一个使用EF 5的模型优先数据验证的好例子,它允许用户在表单中输入数据时进行验证。我想我将不得不为这个主题打开另一个问题。@JKing更新了我的答案,尽管我想指出删除
Model.tt
文件(以及Model.Context.tt
和生成的.cs
文件)应该已经消除了错误;在最坏的情况下,它会引入其他错误,但您不应该继续看到旧的错误。@JKing如果删除.tt
文件,请右键单击EDMX d