C# 数据库已创建,未添加新表

C# 数据库已创建,未添加新表,c#,sql-server,entity-framework,code-first,C#,Sql Server,Entity Framework,Code First,我正在编写一个预创建的数据库,并且已经为表创建了DBSet定义。当前数据库从以前的系统继承而来,每个表包含100000多行数据(5年以上的事务)。我们正在把它放到一个新的应用程序中,在数据上进行移植 因此,数据库是手动创建的,而不是先编写代码。新类是先编写代码的,我们希望这些表能够自动生成到表中 我已经检查过了,用户对我们用于数据库连接的数据库具有db_owner访问权限。数据库也不是只读的 以下是已创建的上下文类: using System; using System.Collections.

我正在编写一个预创建的数据库,并且已经为表创建了DBSet定义。当前数据库从以前的系统继承而来,每个表包含100000多行数据(5年以上的事务)。我们正在把它放到一个新的应用程序中,在数据上进行移植

因此,数据库是手动创建的,而不是先编写代码。新类是先编写代码的,我们希望这些表能够自动生成到表中

我已经检查过了,用户对我们用于数据库连接的数据库具有db_owner访问权限。数据库也不是只读的

以下是已创建的上下文类:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using BHI.WCMS.DAL;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations;


namespace BHI.WCMS.DAL.Partner
{
    public class PartnerContext : DbContext
    {
        public PartnerContext()
            : base("partner")
        {
            //Configuration.LazyLoadingEnabled = false;
            Database.SetInitializer<PartnerContext>(new MigrateDatabaseToLatestVersion<PartnerContext, PartnerConfiguration>());
        }

        public PartnerContext(string ConnectionStringName)
            : base(ConnectionStringName)
        {
        }

        //protected override void OnModelCreating(DbModelBuilder modelBuilder)
        //{
        //    modelBuilder.Entity<PartnerProfileServiceCenterTransaction>().Property(p => p.AmountDue).HasPrecision(8, 2);
        //    base.OnModelCreating(modelBuilder);
        //}

        public DbSet<WarrantyForms> WarrantyForms { get; set; }
        public DbSet<WarrantyFormLines> WarrantyFormLines { get; set; }
        public DbSet<WarrantyFormLineParts> WarrantyFormLineParts { get; set; }
        public DbSet<WarrantyFormLineReplacements> WarrantyFormLineReplacements { get; set; }
        public DbSet<PartnerProfile> PartnerProfiles { get; set; }
        public DbSet<PartnerProfileContactInfo> PartnerProfileContactInfos { get; set; }
        public DbSet<PartnerProfileCustomerAddress> PartnerProfileCustomerAddresses { get; set; }
        public DbSet<PartnerProfileServiceCenterTransaction> PartnerProfileServiceCenterTransactions { get; set; }

        public static PartnerProfile InsertPartnerProfile(PartnerProfile profile)
        {
            using (var db = new PartnerContext())
            {
                foreach (var addy in profile.BillingAddress)
                {
                    addy.DateCreated = DateTime.Now;
                    addy.DateModified = DateTime.Now;
                    db.PartnerProfileCustomerAddresses.Add(addy);
                    db.SaveChanges();
                }

                //profile.DateCreated = DateTime.Now;
                //profile.DateModified = DateTime.Now;
                //db.PartnerProfiles.Add(profile);
                //db.SaveChanges();
            }
            return profile;
        }   // end of  public static PartnerProfile InsertPartnerProfile(PartnerProfile profile)

        public static PartnerProfile UpdatePartnerProfile(PartnerProfile profile)
        {
            using (var db = new PartnerContext())
            {

            }
            return profile;
        }   // end of  public static PartnerProfile UpdatePartnerProfile(PartnerProfile profile)

        public static PartnerProfile SelectPartnerProfile(PartnerProfile profile)
        {
            using (var db = new BHI.WCMS.DAL.Partner.PartnerContext())
            {

            }
            return profile;
        }   // end of  public static PartnerProfile SelectPartnerProfile(PartnerProfile profile)

    }       // end of class WarrantyContext : DbContext

    internal sealed class PartnerConfiguration : DbMigrationsConfiguration<PartnerContext>
    {
        public PartnerConfiguration()
        {
            AutomaticMigrationsEnabled = true;
        }
    }
}           // end of namespace BHI.WCMS.DAL.Partner
在此方面的任何帮助都将不胜感激

谢谢
罗伯特

好的,在和这里的一个家伙一起工作时,我们能够弄清楚发生了什么

  • 这可以创建一个数据库,然后允许它在手动创建的数据库中创建更多的表(这就是我们在日志记录表上所做的)
  • 这个问题不是因为上下文错误,而是因为我对细节的关注不够 在我的一个实体类中,有一个被错误地编码了(我已经有一年没有把它弄糟了)

    版本不正确

    public partial class WarrantyFormLineReplacements
    {
        #region Class Variables
        public int in_WFLineReplacementID;
        public int in_WFlineId;
        public int in_WFId;
        [MaxLength(120)]
        public string vc_ModelNumber;
        public decimal dc_ReplacementCost;
        [MaxLength(255)]
        public string vc_InsertBy;
        public DateTime dt_InsertDate;
        [MaxLength(255)]
        public string vc_UpdateBy;
        public DateTime dt_UpdateDate;
        #endregion
    }       // end of public partial class WarrantyFormLineReplacements
    
    public partial class WarrantyFormLineReplacements
    {
        #region Class Variables
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int in_WFLineReplacementID {get;set;}
        public int in_WFlineId { get; set; }
        public int in_WFId { get; set; }
        [MaxLength(120)]
        public string vc_ModelNumber { get; set; }
        public decimal dc_ReplacementCost { get; set; }
        [MaxLength(255)]
        public string vc_InsertBy { get; set; }
        public DateTime dt_InsertDate { get; set; }
        [MaxLength(255)]
        public string vc_UpdateBy { get; set; }
        public DateTime dt_UpdateDate { get; set; }
        #endregion
    }       // end of public partial class WarrantyFormLineReplacements
    
    更正版本

    public partial class WarrantyFormLineReplacements
    {
        #region Class Variables
        public int in_WFLineReplacementID;
        public int in_WFlineId;
        public int in_WFId;
        [MaxLength(120)]
        public string vc_ModelNumber;
        public decimal dc_ReplacementCost;
        [MaxLength(255)]
        public string vc_InsertBy;
        public DateTime dt_InsertDate;
        [MaxLength(255)]
        public string vc_UpdateBy;
        public DateTime dt_UpdateDate;
        #endregion
    }       // end of public partial class WarrantyFormLineReplacements
    
    public partial class WarrantyFormLineReplacements
    {
        #region Class Variables
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int in_WFLineReplacementID {get;set;}
        public int in_WFlineId { get; set; }
        public int in_WFId { get; set; }
        [MaxLength(120)]
        public string vc_ModelNumber { get; set; }
        public decimal dc_ReplacementCost { get; set; }
        [MaxLength(255)]
        public string vc_InsertBy { get; set; }
        public DateTime dt_InsertDate { get; set; }
        [MaxLength(255)]
        public string vc_UpdateBy { get; set; }
        public DateTime dt_UpdateDate { get; set; }
        #endregion
    }       // end of public partial class WarrantyFormLineReplacements
    
    我造成的核心问题

    核心问题是,我没有一个键(try-catch和logging-catch可以捕获),当我添加键时,我没有为每个变量({get;set;})定义访问器/变异器方法。一旦我添加了这些,它就在已经创建的数据库中创建了没有任何问题的表。正如我所期望的那样,它还创建了_umigrationhistory表