实体框架无法从数据库中正确创建模型

时间:2017-07-13 09:03:58

标签: c# sql-server entity-framework entity-framework-6

我有一些数据库与大多数标准相反(例如,有些表没有PK,有些FK无处可寻......)。一个实体,我们称之为entity1有几个字段,field1,Field2和field_3。

出于某种原因,当我尝试映射它时,field1正常,Field2给我一个错误,field_3也没问题。

Field2的映射如下:

public virtual DbSet<field2> field2 { get; set; }

手动编辑它可以解决问题:

public virtual DbSet<Field2> field2 { get; set; }

但是我不知道为什么EF无法正确构建它,因为从技术上讲它是从数据库中读取的,并且没有其他相关的问题。这也属于包含要使用的实体的自动生成的文件,所以我有点担心我的更改可能会破坏某些内容,每当有人从数据库更新模型时,文件就会自动重新生成。

提前致谢。

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MyProject.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Field2
    {
        public int IdFoo { get; set; }
        public int IdBar { get; set; }
        public string Name { get; set; }
        public Nullable<int> IdSomething { get; set; }
        public Nullable<int> Idwhatever { get; set; }
        public string Blah { get; set; }
        public Nullable<int> idBleh { get; set; }
    }
}

2 个答案:

答案 0 :(得分:0)

public virtual DbSet<field2> field2 { get; set; }

在上面的代码中,引用的第一个field2有一个Type,而第二个是property / variable(有关variableType之间的差异,请参阅this link public virtual DbSet<field2> field2 { get; set; } )。

原因:

field2

不编译是因为您的代码库中没有名为public virtual DbSet<Field2> field2 { get; set; } 的类。

原因:

Field2

编译是否在您的代码库中有一个名为@for (var i = 0; i < Model.length; i++) { string c = "item"; string item = Model.AtElement(i); if(i == 0) { c = "item active"; } <text><div class=@c>@item</text> } 的类。类型名称为case sensitive

答案 1 :(得分:0)

我找到了答案。事实证明,EF6受到包括此错误在内的错误的困扰。

出于这个原因,他们停止支持数据库优先模型并激励代码优先方法而不是自动生成的类。

简而言之,如果可以的话,请转到EF Core并使用Code-first作为您的首选程序。