MVC 4中的列名错误无效

时间:2016-09-04 12:06:04

标签: entity-framework asp.net-mvc-4

我创建了一个简单的类和基于此类的列表。当我尝试populte这个列表并发送到视图iam得到一个错误。请根据数据库查看我的类和自定义映射器模型。

Folloiwng是班级。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcModal.Models
{
    public class mytransaction
    {
        public int Id { get; set; }
        public int my_trn_id { get; set; }
        public string Description { get; set; }
        public List<mytransaction> Translist { get; set; }
    }
}

以下是自定义数据库映射器类。

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using System.Data.Entity.ModelConfiguration;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using MvcModal.Models;

    namespace MvcModal.Models
    {
        public class PrContext : DbContext
        {
            static string _conString = @"Data Source=.\sqlexpress;Initial Catalog=MyDb;Integrated Security=True";

            public PrContext() : base(_conString) { }


            public DbSet<mytransaction> MyTransactions { get; set; }
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                Database.SetInitializer<PrContext>(null);
                modelBuilder.Configurations.Add(new NewTransactMapper());
            }

            public class NewTransactMapper : EntityTypeConfiguration<mytransaction>
            {
                public NewTransactMapper()
                {
                    this.ToTable("mytransaction");
                    this.Property(m => m.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
                    this.HasKey(m => m.my_trn_id);

                }
            }




        }
    }

以下是错误图片。

enter image description here

请查看红色圆圈错误并查看 mytransactions_my_trn_id 文字。 mytransaction 是我的表名, my_trn_id 是我的列名。其余的栏目没有问题,但这让我很疯狂。

请任何人指导我丢失的内容,以及如何使我的表名和列隔离并解决此错误。提前谢谢。

2 个答案:

答案 0 :(得分:0)

如果您想要创建模型,您必须知道EF生成的列以处理关系,如果您没有指定名称(如本例所示),您必须知道EF将分配给属性的名称。
我建议你(我这样做)使用EF标准迁移在空数据库上生成模型,然后从EF创建的数据库中复制结构。

在您的情况下,您只需要添加类型为int的mytransaction_my_trn_id列(与id相同)。如果您需要EF将通过迁移生成相同的数据库,您还需要在该列上添加索引以及从该列到my_trn_id列(主键)的关系。

答案 1 :(得分:0)

我使用以下代码完成了它。它也可能对某人有所帮助。还要感谢大家提出的好建议。

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using System.Data.Entity.ModelConfiguration.Configuration;
using payorder_draft_printing.Controllers;

namespace payorder_draft_printing.Models
{
    public class context_db : DbContext
    {
        static string _conString = @"Data Source=my datasource";
        public context_db()
            : base(_conString)
        {
            Database.SetInitializer<context_db>(null);
        }


        public IDbSet<sms_description> sms_description { get; set; }
        public IDbSet<sms_imported_trn_code> sms_imported_trn_code { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Configurations.Add(new sms_description_mapper());
            modelBuilder.Configurations.Add(new sms_imported_trn_code_mapper());


        }
    }

    class sms_description_mapper : EntityTypeConfiguration<sms_description>
    {
        public sms_description_mapper()
        {
            ToTable("dbo.sms_description");

            this.Property(x => x.id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            HasKey(x => x.trn_code);
            Property(x => x.trn_code).HasColumnName("trn_code").IsRequired();
        }
    }

    class sms_imported_trn_code_mapper : EntityTypeConfiguration<sms_imported_trn_code>
    {
        public sms_imported_trn_code_mapper()
        {
            ToTable("dbo.sms_imported_trn_code");
            HasKey(x => x.trn_code);
            this.Property(x => x.id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            Property(x => x.trn_code).HasColumnName("trn_code").IsRequired();
        }
    }

}