Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在entity framework 5中将代码生成从无更改为默认后出现错误_.net_Visual Studio_Entity Framework_Entity Framework 5 - Fatal编程技术网

.net 在entity framework 5中将代码生成从无更改为默认后出现错误

.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文件中。它们出现在与另一个表中的列/导航属性同

我有一个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]

复制步骤:

  • 在Visual Studio 2012 wpf应用程序中创建新项目。
    它可以是vb或c,我测试了两者
  • 添加ADO.NET实体数据模型(edmx文件)
  • 从sql server添加表(我使用的是express 2008 R2)
  • 生成项目,然后在空白处单击edmx设计器。在属性窗口中,将代码生成策略更改为默认值,而不是无
  • 生成项目并显示错误
  • 我正在使用:

    • visual studio 2012 pro v.11.0.51106.01更新1
    • .NET 4.5.50709
    • Windows8Pro
    我将安装sql server 2012 express,看看这是否有什么不同

    有人能帮我找出这些错误发生的原因吗


    谢谢,将代码生成策略设置为“无”是正确的,您应该保持这种状态

    当您将其更改为“Default”时,您将获得模型中所有实体的类。但是,您已经从
    .tt
    模板中获得了相同的类。结果,你得到了所有的班级成员两次


    为了更改类的生成方式,仍然将代码生成策略保留为“无”,因为默认代码生成无论如何都不可自定义。
    Model.tt
    文件可以自由修改以满足您的需要,修改该文件以使您的类实现您想要的任何接口不需要花费太多精力。

    请参考以下链接。我花了很多时间对这个问题感到沮丧,并从“添加域服务类”屏幕上的链接中找到了这篇支持文章,该链接显示在“一些。。。可能丢失了“

    观察结果的总结是WCF RIA不支持DBContext(由.tt文件指示)。要使用域服务类,需要ObjectContext类。这是来自政府的决议

    为了将实体框架模型与WCF RIA服务结合使用,必须将其转换为基于“ObjectContext”的模型。这可以通过以下步骤完成:

  • 在设计器中打开实体模型
  • (如果需要,请在设计器的“空白区域”中单击,以确保未选择模型中的任何对象)
  • 在“属性”窗口中,将“代码生成策略”从“无”更改为“默认”
  • 删除与模型相邻的两个“.tt”文件,假设您在创建实体模型时没有修改这些文件超出其原始状态。如果修改了这些文件,则实体模型的自定义设置将丢失
  • 重建项目
  • 完成这些步骤后,您将能够在“可用上下文类”列表中选择实体模型的上下文类。此过程的副作用是,您现在已经将实体模型从基于实体框架DbContext的模型转换为基于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