![](/img/trans.png)
[英]How to use generic type with the database Context in EF6 Code First
[英]EF6 Code First Migration with single database multiple context
我正在構建一個包含3個項目的Asp.net MVC5 + EF6解決方案。 我在我的項目中啟用了自動遷移。 下圖顯示了我的項目結構。
BaseContext
。 context
類,它們派生自BaseContext
。 楷模:
Project2中的模型
public class Product
{
[Key]
public int ProductId {get;set;}
...
}
Project3中的模型
public class Order
{
[Key]
public int OrderId {get;set;}
[ForeignKey("Product")]
public int ProductId {get;set}
public virtual Product Product;
...
}
Project3實體( Order.ProductId
)中的屬性引用Project2實體(Product.ProductId)
的屬性作為外鍵引用。
當我在項目1和2中運行update-database
命令時,一切進展順利。 但是當在項目3中運行update-database
命令時會出錯:
數據庫中已經有一個名為“Product”的對象。
現在我正在使用update-database -script
命令生成腳本並手動更改腳本。 但是當項目增長時,每次都要改變sql腳本是一項艱巨的任務。
我忽略了Product
實體加入modelBuilder.Ignore<Product>()
序跳過表創建了Product
實體,在項目3,但它忽略了整個關系。
我該如何解決這個問題?
你不能這樣做。 一個上下文==一個數據庫。 當您針對特定上下文針對數據庫運行遷移時,它將基於該上下文,並將刪除任何不適用的表或嘗試刪除並重新創建數據庫。
您應該將所有實體移動到類庫中,以及包含所有實體的上下文的單個實例。 然后,您可以針對類庫進行遷移,只需在其他項目中引用即可。
或者,您可以通過使用現有數據庫方法來執行您想要的操作。 實質上,您完全關閉基本上下文的遷移,然后每個子上下文只能包含屬於它的實體。 但是,此時您將完全負責管理數據庫。
public class BaseContext : DbContext
{
public BaseContext()
: base("ConnectionString")
{
Database.SetInitializer<BaseContext>(null);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.