J K*_*ing 5 .net entity-framework visual-studio entity-framework-5
我有一个wpf项目4.5,我使用EF 5来生成模型类.我想为创建的EF类实现iNotifyPropertyChanged.所以我右键单击我的设计器(visual studio 2012)并将代码生成设置从"无"更改为"默认"
一旦我这样做,我得到了数百个错误,如下所示:
错误67'公共属性"TableColumnName" As "ColumnType"具有多个具有相同签名的定义.
[编辑1]
这些错误都在DataModel.Designer.Vb文件中抛出.它们出现在与另一个表中的列/导航属性同名的任何表列属性或导航属性上.我发现很难相信我不能在具有相同名称的不同表中使用列,这里必须进行其他操作.
[编辑2]
所以我从设计器中删除了所有数据库对象,然后将代码生成策略更改为默认值,然后在图中添加了一个表(客户端).我为表的每个属性得到了很多错误(所以这不能是因为其他表具有与我之前想到的相同的列名).我收到了上面列出的每个属性(表列)中的错误以及每个属性的以下错误:
错误变量'_ColumnName'与在类'client'中为属性'ColumnName'隐式声明的成员冲突.C:\ FTC_DAL.Designer.vb
当我将代码生成返回到无时,这就消失了.我盯着认为这是EF 5中的一个错误.
[编辑3]
重现步骤:
我在用:
我将安装sql server 2012 express,看看这是否有所不同
有人可以帮我弄清楚为什么会发生这些错误.
谢谢
小智 7
请参阅以下链接.我花了很多时间对这个问题感到沮丧,并且发现这个支持文章来自"添加域服务类"屏幕后面的'一些......可能会丢失'...
观察摘要是WCF RIA不支持DBContext(由.tt文件表示).要使用Domain服务类,需要ObjectContext类.以下是支持文章的解决方案.
为了将您的Entity Framework模型与WCF RIA Services一起使用,您必须将其转换为基于"ObjectContext"的模型.这可以使用以下步骤完成:
- 在设计器中打开您的实体模型
- (如果需要,请单击设计器的"空白区域"以确保未选择模型中的任何对象)
- 在"属性"窗口中,将"代码生成策略"从"无"更改为"默认"
- 删除与模型相邻的两个".tt"文件,假设您在创建实体模型时未将这些文件修改为超出其原始状态.如果您已修改这些文件,则实体模型的自定义将丢失.
- 重建项目
执行这些步骤后,您将能够在"可用上下文类"列表中选择实体模型的上下文类.此过程的副作用是您现在已将实体模型从基于Entity Framework DbContext的模型转换为基于ObjectContext的模型.
小智 5
将代码生成策略设置为"无"是正确的,您应该这样做.
当您将其更改为"默认"时,您将获得模型中所有实体的类.但是,您已经从.tt模板中获取了相同的类.结果,你得到所有班级成员两次.
为了改变类的生成方式,仍然将代码生成策略保留为"无",因为无论如何默认代码生成都不可自定义.该Model.tt文件可以自由修改以满足您的需求,并且不需要花太多精力来修改它以使您的类实现您想要的任何接口.
| 归档时间: |
|
| 查看次数: |
4551 次 |
| 最近记录: |