实体框架6.2代码优先错误

时间:2017-12-29 14:44:51

标签: c# .net entity-framework ef-code-first

我对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. 我打开干净的项目但很惊讶......我有一个新的问题。我的外键抛出异常。

  3.   

    无法确定之间关联的主要结束   类型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. 我没有迁移,我更新了我的数据库,检查了表,但实体框架仍然说,有迁移。
    2.   

      支持上下文的模型自数据库以来已发生变化   创建

1 个答案:

答案 0 :(得分:0)

  1. 尝试将抽象修饰符添加到BaseClass定义。 NotMapped属性应该处于最低级别。如果需要映射重写属性,则应在继承的类中直接使用Column属性进行映射。

  2. 尝试运行命令Install-Package EntityFramework -Version 6.2.0 -Project {{EFProjectName}}重新安装包并正确引用它。

  3. 您最好在Address类及其ForeignKey属性(或您称之为的任何属性)中指定StudentId属性。它是一对多或一对一的关系。

  4. 有关迁移的信息与编译的数据库模型一起存储在数据库表__MigrationHistory中以加快速度(如果代码适合数据库,则每次检查都很耗时),这就是您收到该错误的原因。您的代码中有不同的已编译模型,并且不同的存储在迁移历史记录中。您可以创建空迁移运行命令Add-Migration -Name ManualDbUpdate -IgnoreChanges来克服这个问题,但您必须确保代码模型和数据库模型是相同的。如果不是,你会得到例外。