【问题标题】:Entity Framework 6 error with SQL Server 2012 throws EntitySqlExceptionSQL Server 2012 的 Entity Framework 6 错误引发 EntitySqlException
【发布时间】:2017-04-16 20:33:26
【问题描述】:

我正在使用 razor 语法的 asp.net mvc 5 和 Entity Framework 6 开发一个 Intranet 应用程序,但是当我运行该应用程序时,会出现 EntitySqlException

当我查看错误消息时,我有这个:

实体集或函数导入“COVENANTS_RT”未在实体容器“Model1”中定义。

这是我的 Model1 DbContext:

public partial class Model1 : DbContext
{
    public Model1() : base("name=Model1")
    {
    }

    public virtual DbSet<covenants> covenants { get; set; }
    public virtual DbSet<covenants_detalhes> covenants_detalhes { get; set; }
    public virtual DbSet<COVENANTS_RT> COVENANTS_RT { get; set; }
    public virtual DbSet<RT> RT { get; set; }
    public virtual DbSet<VW_USUARIOS> VW_USUARIOS { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    ...
    modelBuilder.Entity<RT>()
                .Property(e => e.nome_operacao)
                .IsUnicode(false);

    modelBuilder.Entity<RT>()
                .HasMany(e => e.COVENANTS_RT)
                .WithRequired(e => e.RT)
                .HasForeignKey(e => e.FK_COD_RT);

这是我的模型类COVENANTS_RT

[Table("COVENANTS_RT")]
public partial class COVENANTS_RT
{
        [Key]
        public int CODIGO_COVENANT_PK { get; set; }

        [Column(TypeName = "ntext")]
        public string texto_covenant { get; set; }

        [StringLength(255)]
        public string situacao { get; set; }

        [Column(TypeName = "ntext")]
        public string OBS { get; set; }

        public int FK_COD_RT { get; set; }

        public virtual RT RT { get; set; }
}

还有班级RT

[Table("RT")]
public partial class RT
{
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public RT()
        {
            COVENANTS_RT = new HashSet<COVENANTS_RT>();
        }

        [Key]
        public int PK_CODIGO_RT { get; set; }

        ... 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<COVENANTS_RT> COVENANTS_RT { get; set; }
}

以及razor页面出现错误的代码:

@model site_covenants.Models.RT 
@{
    Layout = null;
}
...

@foreach (var Item in Model.COVENANTS_RT )

那么,我必须做些什么来解决这个问题?

【问题讨论】:

    标签: asp.net-mvc razor entity-framework-6


    【解决方案1】:

    public partial class Model1 : DbContext 此处的这行代码实际上是您的 DbContext 而不是模型。相应地命名您的对象总是更好。

    例如:public partial class ApplicationDbContext : DbContext insead of Model1

    为了使用 fluent api,您需要重写 OnModelCreating 方法:

    public partial class ApplicationDbContext : DbContext
    {
        public virtual DbSet<covenants> covenants { get; set; }
        public virtual DbSet<covenants_detalhes> covenants_detalhes { get; set; }
        public virtual DbSet<COVENANTS_RT> COVENANTS_RT { get; set; }
        public virtual DbSet<RT> RT { get; set; }
        public virtual DbSet<VW_USUARIOS> VW_USUARIOS { get; set; }
    
        public ApplicationDbContext() 
            : base("name=Model1")
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<RT>()
                .Property(e => e.nome_operacao)
                .IsUnicode(false);
    
            modelBuilder.Entity<RT>()
                .HasMany(e => e.COVENANTS_RT)
                .WithRequired(e => e.RT)
                .HasForeignKey(e => e.FK_COD_RT);
        }
    }
    

    【讨论】:

    • 是的,我忘记将所有课程复制到问题中。但我编辑了。
    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 2021-10-21
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    相关资源
    最近更新 更多