首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF Migrations正在复制语句

EF Migrations正在复制语句
EN

Stack Overflow用户
提问于 2014-02-11 20:08:50
回答 1查看 249关注 0票数 1

我做了一个配置更改,这就是EF6提出的迁移

代码语言:javascript
复制
 public override void Up()
    {
        DropForeignKey("dbo.AdditionalCostLines", "OrderID", "dbo.Documents");
        DropForeignKey("dbo.AdditionalCostLines", "OrderID", "dbo.Documents");
        DropIndex("dbo.AdditionalCostLines", new[] { "OrderID" });
        DropIndex("dbo.AdditionalCostLines", new[] { "OrderID" });
        CreateIndex("dbo.AdditionalCostLines", "OrderID");
        CreateIndex("dbo.AdditionalCostLines", "OrderID");
        AddForeignKey("dbo.AdditionalCostLines", "OrderID", "dbo.Documents", "ID");
        AddForeignKey("dbo.AdditionalCostLines", "OrderID", "dbo.Documents", "ID");
    }

    public override void Down()
    {
        DropForeignKey("dbo.AdditionalCostLines", "OrderID", "dbo.Documents");
        DropForeignKey("dbo.AdditionalCostLines", "OrderID", "dbo.Documents");
        DropIndex("dbo.AdditionalCostLines", new[] { "OrderID" });
        DropIndex("dbo.AdditionalCostLines", new[] { "OrderID" });
        CreateIndex("dbo.AdditionalCostLines", "OrderID");
        CreateIndex("dbo.AdditionalCostLines", "OrderID");
        AddForeignKey("dbo.AdditionalCostLines", "OrderID", "dbo.Documents", "ID", cascadeDelete: true);
        AddForeignKey("dbo.AdditionalCostLines", "OrderID", "dbo.Documents", "ID", cascadeDelete: true);

为什么每个陈述都是重复的?

我正在使用实体框架版本6。

迁移本身也是无用的,因为它删除并重新创建相同的索引和外键,但是我的上下文已经改变了,所以我必须嵌入一个迁移记录才能运行代码。在这里,由更新数据库-script提供生成的SQL:

代码语言:javascript
复制
IF object_id(N'[dbo].[FK_dbo.AdditionalCostLines_dbo.Documents_OrderID]', N'F') IS NOT NULL
ALTER TABLE [dbo].[AdditionalCostLines] DROP CONSTRAINT         [FK_dbo.AdditionalCostLines_dbo.Documents_OrderID]
IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_OrderID' AND object_id = object_id(N'[dbo].[AdditionalCostLines]', N'U'))
DROP INDEX [IX_OrderID] ON [dbo].[AdditionalCostLines]
CREATE INDEX [IX_OrderID] ON [dbo].[AdditionalCostLines]([OrderID])
ALTER TABLE [dbo].[AdditionalCostLines] ADD CONSTRAINT [FK_dbo.AdditionalCostLines_dbo.Documents_OrderID] FOREIGN KEY ([OrderID]) REFERENCES [dbo].[Documents] ([ID])

编辑:包含更多示例代码:

代码语言:javascript
复制
  public class Document
{
[Key]
public int ID { get; set; }
public virtual Vendor Vendor { get; set; }
[ForeignKey("Vendor")]
public int? VendorID { get; set; }

[Display(Name = "Reference Number")]
public string ReferenceNumber { get; set; }
public string Notes { get; set; }

public virtual List<OrderLine> Lines { get; set; }
}

public class Order : Document
{
    //Fields Atop Documents base fields for order style documents.


    [Display(Name = "Payment Terms")]
    public virtual PaymentTerms PaymentTerms { get; set; }
    [ForeignKey("PaymentTerms")]
    public int? PaymentTermsID { get; set; }

    //Collections

    public virtual List<AdditionalCostLine> AdditionalCosts { get; set; }
}

public class WorkOrder : Order
{
   [Display(Name = "Est. Ship Date")]
   [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
   public DateTime? EstimatedShipDate { get; set; }

public virtual List<WorkOrderLineChange> LineChanges { get; set; }
}

public class AdditionalCostLine
{
    [Key]
    public int ID { get; set; }

    public virtual Order Order { get; set; }
    [ForeignKey("Order")]
    public int OrderID { get; set; }

    public string Description { get; set; }

    [DisplayFormat(DataFormatString = "{0:$0.00#}")]
    public decimal Rate { get; set; }
    public int Quantity { get; set; }

    public virtual AdditionalCostType AdditionalCostType { get; set; }
    [ForeignKey("AdditionalCostType")]
    public int AdditionalCostTypeID { get; set; }

    [NotMapped]
    public decimal Amount
    {
        get
        {
            return Rate * Quantity;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-07 23:19:46

虽然Store模型( EF生成的sql )没有改变,但由于类的改变,EntityFramework认为模型确实发生了变化,并且需要搭建迁移的支架。您可能会得到重复迁移,因为该表是从您的模型中引用两次。因为您知道这是应用程序的NOP,所以生成一个只更新存储在数据库中的快照的空迁移是安全的。

若要从包管理器控制台生成空迁移,请执行以下操作:

代码语言:javascript
复制
PM> Add-Migration emptyMigration -IgnoreChanges
PM> Update-Database

请记住,通过生成一个空迁移,您可以保证EF数据库模型将与项目中的代码匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21711968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档