【问题标题】:"Update model from database"“从数据库更新模型”
【发布时间】:2012-12-11 15:39:37
【问题描述】:

我正在使用 Visual Studio 并开发基于 MVC 的应用程序。我正在尝试将一些表格添加到我的模型中。我使用了“从数据库更新模型”选项。新表出现在我的 edmx 文件中。我已经重建了我的解决方案,但是缺少新表的类。每次我想添加新表时,有什么技巧可以生成类吗?还是我必须手动完成? 当我将“代码生成策略”设置为“默认”时,我收到了数百个类似于 Error 117 The type 'Mvc4.Models.DPR_MM' already contains a definition for 'DPR_TS' 的错误。
我已经删除了整个模型。在搜索DPR_MM 的整个解决方案时,我得到了以下结果: 查找所有“DPR_MM”、子文件夹、查找结果 1、整个解决方案、“”

  C:\\Mvc4\Controllers\HomeController.cs(41):                    var DPR_MM = from d in ctx.DPR_MM
  C:\\Mvc4\Controllers\HomeController.cs(45):                    var arr = new object[DPR_MM.Count()];
  C:\\Mvc4\Controllers\HomeController.cs(47):                    foreach (var d in DPR_MM)
  C:\\Mvc4\Models\Model1.edmx(9):          <EntitySet Name="DPR_MM" EntityType="Model.Store.DPR_MM" store:Type="Tables" Schema="QF" />
  C:\\Mvc4\Models\Model1.edmx(45):        <EntityType Name="DPR_MM">
  C:\\Mvc4\Models\Model1.edmx(366):          <EntitySet Name="DPR_MM" EntityType="Model.DPR_MM" />
  C:\\Mvc4\Models\Model1.edmx(389):        <EntityType Name="DPR_MM">
  C:\\Mvc4\Models\Model1.edmx(715):          <EntitySetMapping Name="DPR_MM">
  C:\\Mvc4\Models\Model1.edmx(716):            <EntityTypeMapping TypeName="Model.DPR_MM">
  C:\\Mvc4\Models\Model1.edmx(717):              <MappingFragment StoreEntitySet="DPR_MM">
  C:\\Mvc4\Models\Model1.edmx.diagram(8):        <EntityTypeShape EntityType="Model.DPR_MM" Width="1.5" PointX="0.75" PointY="0.75" IsExpanded="true" />
  Matching lines: 11    Matching files: 3    Total files searched: 168

所以我没有看到任何 DPR_MM 类。我做错了什么?

【问题讨论】:

  • 在设计器属性中,“代码生成策略”是否设置为“默认”?
  • 不,不是。我已尝试更改它,但仍未生成表,并且出现数百个类似于此错误的错误 错误 117 类型“Mvc4.Models.DPR_MM”已包含“DPR_TS”的定义。
  • 有什么错误?编辑您的问题并在其中添加一些示例。
  • 好的,您是否在添加新表之前为现有表创建了类?如果您或其他人手动创建了一些类,然后您添加了新表,然后设置了代码生成策略,则可能是 VS 正在尝试为已创建的表生成类。跨度>
  • @Mamu:如果您使用 VS2012 并将代码生成策略更改为默认(从无)但没有删除 edmx 下的 tt 文件,则您的实体将生成两次。要么删除 tt 文件,要么将代码生成策略设置为 None

标签: visual-studio entity-framework visual-studio-2012


【解决方案1】:

编辑

现在我知道您遇到了错误,请查看生成的代码(您甚至可以对您的类 DPR_MM 进行解决方案搜索以查找该类的所有实例)。我猜你的项目中有一个类 Mvc4.Models.DPR_MM 已经有 DPR_TS 作为成员,并且代码生成会看到它并且不会生成另一个类,如下所示:

public partial class DPR_MM : EntityObject
{
    public global::System.Int32 DPR_TS
    {
    ...
    }
}

public partial class DPR_MM : EntityObject
{
    //maybe code generation fails because it doesn't want to do this a second time knowing it would be ambiguous 
    public global::System.Int32 DPR_TS  
    {
    ...
    }
}

除非存在某些数据库或命名空间问题,否则您应该始终能够生成新模型,因此请确保您没有像 @Mamu 所说的那样放置额外的文件。或者你可以谷歌它:
first hit
another answer





初步回答

进行构建。然后,您应该会根据“从数据库更新模型”时选择的表查看所有新类(显然,“从数据库更新模型”时必须选择新表)

【讨论】:

  • 我做到了 - 新表不存在。现在我也尝试使用选定的表格。没有运气。
  • 抱歉,我以为就这样。还没有 VS 2012 在工作,否则我会检查,尽管您应该能够查看 YourModel.edmx 下的 YourModel.designer.cs 并查看实际课程。验证该类是否与您添加的表相匹配,您的项目中没有错误并进行清理和重建。
  • NP!顺便说一句:我写道,我已经重建了解决方案,没有任何运气!
  • 如果这不起作用,我会删除你的模型并重新开始。只需要一分钟左右,可能比排除奇怪的错误更容易
  • 是的,你是对的。但这仍然很烦人,恕我直言......:oS!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多