实体框架6.2代码优先错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实体框架6.2代码优先错误相关的知识,希望对你有一定的参考价值。

我对Entity framework 6.2有一些问题。我改变了ef版本,现在我有很多bug ..

EF版本:6.2 Visual studio版本:15.5.2 .Net版本:4.7.1 操作系统:Windows 10 Pro 1709

1.NotMapped为什么不继续工作?我的示例类:

public class BaseClass {  
    public string MappedProp {get;set;}  
    public virtual string NotBeMappedProp {get;set;}  
}  

public class Test : BaseClass {  
     public string MappedProp {get;set;}  
     [NotMapped]  
     public override string NotBeMappedProp {get;set;}  
} 
  1. add-migration没有找到项目的实体框架。但我已经安装了它。此外,我删除了所有包文件夹。但是仍然继续相同的例外。
  2. 我打开干净的项目,但惊喜......我有一个新问题。我的外键抛出异常。

无法确定类型x1和x2之间关联的主要结束。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。

我的代码部分看起来像这样:

public class Student{
     .....
     public string Name {get;set;}
     public long? LocationId {get;set;}
     [ForeingKey("LocationId")]
     public Location Address {get;set;}
     ......
}
public class Location{
     public long Id {get;set;}
     ........
}

它与以前的版本一起使用。

  1. 我没有迁移,我更新了我的数据库,检查表但实体框架仍然说,有一个迁移。

自创建数据库以来,支持上下文的模型已更改

答案
  1. 尝试将abstract abstract modifier添加到BaseClass定义中。 NotMapped属性应该处于最低级别。如果需要映射重写属性,则应在继承的类中直接使用Column属性进行映射。
  2. 尝试运行命令Install-Package EntityFramework -Version 6.2.0 -Project {{EFProjectName}}以重新安装包并正确引用它。
  3. 您最好在Address类及其ForeignKey属性(或您称之为的任何属性)中指定StudentId属性。它是一对多或一对一的关系。
  4. 有关迁移的信息与编译的db模型一起存储在数据库表__MigrationHistory中以加快速度(如果代码适合数据库,则每次检查都很耗时),这就是您得到该错误的原因。您的代码中有不同的已编译模型,并且不同的存储在迁移历史记录中。您可以创建空迁移运行命令Add-Migration -Name ManualDbUpdate -IgnoreChanges来克服这个问题,但您必须确保代码模型和数据库模型是相同的。如果不是,你会得到例外。

以上是关于实体框架6.2代码优先错误的主要内容,如果未能解决你的问题,请参考以下文章

实体框架代码优先:启用迁移错误

添加新实体标量时实体框架 4 映射片段错误

C#:使用实体框架代码优先访问数据库

代码优先实体框架。急切加载,验证然后保存导致错误

实体框架代码优先自加入,'多重性在角色中无效'

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段