实体框架 6 代码首先更改从视图到新表的映射
本文关键字:视图 新表 映射 框架 代码 实体 | 更新日期: 2023-09-27 18:33:00
我正在维护一个 WPF 应用程序,该应用程序使用实体框架代码优先进行迁移(不是自动(。此应用程序中的某些 POCO 映射到视图(指向另一个数据库(。我想用于执行此操作的方法类似于此答案中所做的:如何在代码优先实体框架中使用视图
现在,我希望其中一个 POCO(公司(指向一个表而不是视图。自从指向视图以来,POCO 也发生了一些变化。
当我在 POCO 和 CompanyConfiguration-class 中进行更改(更改 ToTable(((后添加迁移时,迁移似乎认为视图是现有表并尝试重命名它。例如,Up((-方法的开头将如下所示:
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。
没有太多的信息/帮助来解决这个问题,但我做了以下对我有用的工作(尽管非常繁琐的工作(:
我不得不在迁移中完全重写自动创建的 Up(( 和 Down(( 方法。使用 CreateTable(( 创建表而不是重命名视图。
在 Up(( 方法中:
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)
;
从另一个数据库中提取的公司值引用某些列的长 maxLength。