【问题标题】:Entity Framework Missing Partial实体框架缺失部分
【发布时间】:2020-12-21 23:44:06
【问题描述】:

我正在学习实体框架,我决定创建一个简单的控制台应用程序,它使用实体框架和两个表。

我创建了两个表:http://wstaw.org/w/LrL/

我有适合数据库的类。

这是代码。

联系人类。

public class Contact
{
     public int ContactID { get; set; }
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public ICollection<Address> Addresses { get; set; }
}

还有地址类。

public class Address
{
     public int AddressID { get; set; }
     public string Street { get; set; }
     public string City { get; set; }
}

Visual Studio 显示以下错误。

错误 3 声明时缺少部分修饰符 输入“MyEntityPOCO.Contact”;另一个部分 此类型的声明存在 Contact.c 8 19 MyEntityPOCO

错误 4 类型声明中缺少部分修饰符 'MyEntityPOCO. 地址';这种类型的另一个部分声明 存在 Address.cs 8 19 MyEntityPOCO

错误 1 ​​运行转换:请覆盖 用实际名称替换标记“$edmxInputFile$” 您想从中生成的 .edmx 文件。 MyEntityPOCO\Model1.tt 1 1

我该如何解决这些错误?

【问题讨论】:

  • 你在做代码优先的实体框架实现吗?如果没有,您将使用实体映射工具将这些类从数据库生成到实体模型中。
  • 首先我创建了一个代码,接下来我创建适当的类,然后添加 Ado.net 实体数据模型并从数据库生成模型。
  • BUt 当我删除联系人类和地址类时,解决方案正在编译。但我不知道为什么我不能为基础创建适当的类,
  • 现在可以了。我应该选择我的 .edmx 文件并单击属性并将代码生成策略选择为无。问题解决了。

标签: c# entity-framework


【解决方案1】:

partial 关键字用于在多个代码文件中声明一个类。这里解释一下:http://msdn.microsoft.com/en-us/library/wa80x488.aspx

在您的情况下发生的情况是,您有一个用 partial 关键字装饰的类(EF 在 yourmodel.edmx.cs 文件中创建的那个),以及另一个同名的类在同一个命名空间中。

通常在同一个命名空间中有两个同名的类(没有 partial 关键字),你会得到一个类名冲突异常。在这种情况下,由于两个类之一被标记为部分,C# 编译器会生成您所看到的错误。

建议的解决方案:在您的代码中搜索另一个类,确定它是如何到达那里的,然后重命名它,将它移动到不同的命名空间,或者如果它是同一个类,也用部分标记。

【讨论】:

  • 虽然其他答案也是正确的,但我认为这个答案比其他答案更好,因为它解释了为什么需要部分类。
  • 我更改了类名,为什么我仍然收到此错误?
  • @MihaiBratulescu - 从 /bin 和 /obj 中删除所有 DLL 文件 - 你可能有陈旧的程序集。如果这不起作用,请使用文本搜索工具在您的代码中搜索有问题的类名。如果您收到“另一个部分声明”错误,您肯定会发现不止一次。
【解决方案2】:

看起来您使用的是 Database First Entity Framework,因此您创建了数据库并通过拖放操作将实体移动到 edmx 中。

看起来您可能已经手动创建了联系人和地址类。是这样吗?您不需要这样做,因为 Entity Framework 会为您生成类。

【讨论】:

  • 但是我现在没有任何课程,解决方案正在编译中。
【解决方案3】:

当您在 Entity Framework 中创建实体时,EF 会自动为您创建类并将它们标记为 PARTIAL 类。因此,您可以“开箱即用”立即使用它们。

这就是为什么它说你需要将它们创建为部分类......它已经有一个名为“地址”的类被标记为部分,所以它认为这个新的应该是该类的另一个“部分”,但你只是忘了那样标记它。

如果您想扩展该类的功能,并在该类中添加功能,您可以执行以下操作:

public partial class Address {...}

但看起来您可能只是想再次重新定义该类。

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,Visual Studio 正在生成 .edmx 文件,但没有生成类。花了半天的时间,我得到了解决方案。

    在创建项目时使用不同版本的 MVC 框架: 在创建项目时尝试使用 .net MVC 4.5 版本或任何其他版本。

    使用不同版本的实体框架 在添加实体框架数据模型时,我将实体框架版本从 6.x 更改为 5.0。

    就是这样。

    【讨论】:

      猜你喜欢
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 2018-07-13
      相关资源
      最近更新 更多