实体框架缺少部分

时间:2011-11-11 17:32:23

标签: c# entity-framework

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

我创建了两个表: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';另一种这种类型的部分声明    存在Address.cs 8 19 MyEntityPOCO

     

错误1正在运行转换:请覆盖   使用实际名称替换令牌'$ edmxInputFile $'   你想要生成的.edmx文件。 MyEntityPOCO \ Model1.tt 1 1

我如何解决这些错误?

4 个答案:

答案 0 :(得分:4)

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

你的情况是你有一个用partial关键字装饰的类(由EF创建的 yourmodel .edmx.cs文件中的一个),另一个同名的类在同一名称空间中。

通常在同一名称空间中有两个具有相同名称的类(没有partial关键字),您将获得类名冲突异常。在这种情况下,因为两个类中的一个被标记为partial,所以C#编译器会生成您看到的错误。

建议的解决方案:搜索您的代码以查找其他类,确定它是如何到达的,并将其重命名,将其移动到不同的命名空间,或者如果它应该是同一个类,也将其标记为部分。

答案 1 :(得分:0)

看起来您正在使用Database First Entity Framework,因此您创建了数据库并进行了拖放操作以将实体移动到edmx中。

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

答案 2 :(得分:0)

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

这就是为什么它说你需要将它们创建为部分类...它已经有一个名为'Address'的类被标记为partial,所以它认为这个新类应该是该类的另一个'part',但你只是忘了用它标记它。

如果你想扩展该类可以做的事情,并在该类中添加函数,你可以这样做:

public partial class Address {...}

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

答案 3 :(得分:0)

我在 Visual Studio 生成 .edmx 文件但没有生成类时遇到了同样的问题。折腾了半天,终于搞定了。

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

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

就是这样。