实体框架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;}
}
add-migration
没有找到项目的实体框架。但我已经安装了它。此外,我删除了所有包文件夹。但是仍然继续相同的例外。- 我打开干净的项目,但惊喜......我有一个新问题。我的外键抛出异常。
无法确定类型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;}
........
}
它与以前的版本一起使用。
- 我没有迁移,我更新了我的数据库,检查表但实体框架仍然说,有一个迁移。
自创建数据库以来,支持上下文的模型已更改
答案
- 尝试将abstract abstract modifier添加到
BaseClass
定义中。NotMapped
属性应该处于最低级别。如果需要映射重写属性,则应在继承的类中直接使用Column
属性进行映射。 - 尝试运行命令Install-Package EntityFramework -Version 6.2.0 -Project {{EFProjectName}}以重新安装包并正确引用它。
- 您最好在Address类及其
ForeignKey
属性(或您称之为的任何属性)中指定StudentId
属性。它是一对多或一对一的关系。 - 有关迁移的信息与编译的db模型一起存储在数据库表__MigrationHistory中以加快速度(如果代码适合数据库,则每次检查都很耗时),这就是您得到该错误的原因。您的代码中有不同的已编译模型,并且不同的存储在迁移历史记录中。您可以创建空迁移运行命令Add-Migration -Name ManualDbUpdate -IgnoreChanges来克服这个问题,但您必须确保代码模型和数据库模型是相同的。如果不是,你会得到例外。
以上是关于实体框架6.2代码优先错误的主要内容,如果未能解决你的问题,请参考以下文章