实体框架缺失部分

本文关键字:失部 框架 实体 | 更新日期: 2023-09-27 18:14:07

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

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

我有适合数据库的类。

这是代码。

Contact类。

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

和Address类

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

Visual studio显示以下错误。

的声明中缺少部分修饰符类型"MyEntityPOCO.Contact";另一个部分Contact.c 8 19 MyEntityPOCO

错误4类型声明中缺少部分修饰符"MyEntityPOCO.Address";该类型的另一个部分声明exists Address.cs 8 19 MyEntityPOCO

错误1正在运行转换:请覆盖将令牌'$edmxInputFile$'替换为文件的实际名称您希望从中生成的.edmx文件。MyEntityPOCO ' Model1。Tt 1 1

如何解决这些错误?

实体框架缺失部分

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

在您的例子中发生的事情是,您有一个用partial关键字装饰的类(EF在yourmodel.edmx.cs文件中创建的类),以及在相同名称空间中具有相同名称的另一个类。

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

建议的解决方案:搜索代码中的其他类,确定它是如何到达那里的,或者重命名它,将其移动到不同的命名空间,或者如果它意味着是相同的类,也将其标记为partial。

看起来您正在使用数据库优先实体框架,因此您创建了数据库并通过拖放操作将实体移动到edmx.

看起来您可能已经为Contact和Address手动创建了类。是这样吗?你不需要这样做,因为实体框架会为你生成类。

当您在实体框架中创建实体时,EF将自动为您创建类并将其标记为部分类。因此,您可以立即使用它们'开箱即用'。

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

如果您想扩展该类的功能,并在该类中添加函数,您可以这样做:

public partial class Address {...}

,但看起来您可能只是试图再次重新定义类。

我在visual studio生成时有同样的问题。edmx文件,但没有生成类。花了半天时间,我终于找到了解决办法。

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

使用不同版本的实体框架当我添加实体框架数据模型时,我从6更改了实体框架版本。