我正在学习实体框架,我决定创建一个简单的控制台应用程序,它将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
我如何解决这些错误?
答案 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。
就是这样。