2014-12-04 95 views
0

我正在维护一个使用实体框架代码优先与迁移(不自动)的WPF应用程序。这个应用程序中的一些POCO被映射到视图(指向另一个数据库)。我猜这样做的方法类似于在这个答案中做的:how to use views in code first entity framework实体框架6代码第一次更改从视图映射到新表

现在我想要一个POCO(公司)指向一个表而不是一个视图。自从指出这个观点以来,POCO也发生了一些变化。

当我在POCO和CompanyConfiguration-class中进行更改(更改ToTable())后添加迁移时,迁移者似乎认为该视图是现有表并尝试重命名它。例如向上()的开始 - 方法是这样的:

RenameTable(name: "dbo.vCompany", newName: "Company"); 

    AlterColumn("dbo.Company", "ParentAccount", c => c.String(maxLength: 160)); 
    AlterColumn("dbo.Company", "Country", c => c.String(maxLength: 100)); 

但是,我不想认为要改变,我要从头开始匹配POCO创建的公司表。什么才是完成这个的正确/好方法?没有自己编写Up()和Down()方法可能吗?

当前应用程序使用实体框架6.1,但是当第一次创建该公司/ vCompany映射时,它是我相信的4.3版本。

回答

1

没有太多信息/帮助,以获取有关这一点,但我没有为我工作(虽然很tidious工作)以下:

我不得不完全重写自动创建向上()和向下()迁移中的方法。使用CreateTable()创建表而不是重命名视图。

在向上()方法:

CreateTable(
      "dbo.Company", 
      c => new 
      { 
       CompanyId = c.Guid(nullable:false), 
       ParentAccount = c.String(maxLength:160), 
       Country = c.String(maxLength:100), 
       Address1_City = c.String(maxLength:4000), 
       Address1_Country = c.String(maxLength: 4000), 
       Address1_Line1 = c.String(maxLength: 4000), 
       Address1_Line2 = c.String(maxLength: 4000), 
       Address1_PostalCode = c.String(maxLength:50), 
       Owner = c.String(maxLength:160), 
       OwnerId = c.Guid(nullable:false), 
       Name = c.String(maxLength:160), 
       EMailAddress = c.String(maxLength:100), 
       InvoiceEMailAddress = c.String(maxLength:100), 
       Fax = c.String(maxLength:50), 
       CreditLimit = c.Decimal(storeType:"money"), 
       CreditOnHold = c.Boolean(nullable:false, defaultValue:false), 
       IsPrivate = c.Boolean(nullable:false, defaultValue:false), 
       StatusCode = c.Int(), 
       CustomerTypeCode = c.Int(), 
       BEGreenCreditLimit = c.Int(), 
       IssuingBodyAccount = c.String(maxLength:20), 
       CustomerType = c.String(maxLength:100), 
       IsElProducer = c.Boolean(nullable:false, defaultValue:false), 
       IsEnergyTrader = c.Boolean(nullable:false,defaultValue:false), 
       VATNumber = c.String(maxLength:100), 
       ContactPerson = c.String(maxLength:160), 
       ContactPersonPhone = c.String(maxLength:50), 
       ContactPersonFax = c.String(maxLength:50), 
       ContactPersonEmail = c.String(maxLength:100) 

      } 
      ) 
      .PrimaryKey(p=>p.CompanyId) 
      ; 

从另一个数据库中提取的值公司,REF为一些列的长最大长度。