我首先使用EF 5.0代碼,通過PM控制檯使用自動遷移。實體框架代碼與鏈接表的首次遷移問題
我正在嘗試將第4次遷移應用到項目,並且基於約定的連接表的命名導致它們被刪除並以不同的名稱重新創建。這在以前的任何遷移過程中都沒有發生過。
例如:
我有2類用戶和網站。
InitialCreate遷移
這創造了按照慣例被稱爲 「UserSites」 鏈接表。
CreateTable(
"dbo.UserSites",
c => new
{
User_Id = c.Guid(nullable: false),
Site_Id = c.Guid(nullable: false),
})
.PrimaryKey(t => new { t.User_Id, t.Site_Id })
.ForeignKey("dbo.Users", t => t.User_Id, cascadeDelete: true)
.ForeignKey("dbo.Sites", t => t.Site_Id, cascadeDelete: true)
.Index(t => t.User_Id)
.Index(t => t.Site_Id);
一切正常。
跳轉到今天:
第四遷移
這滴UserSites鏈接表,並創建一個SiteUsers鏈接表。
顯然不理想!
public override void Up()
{
DropForeignKey("dbo.UserSites", "User_Id", "dbo.Users");
DropForeignKey("dbo.UserSites", "Site_Id", "dbo.Sites");
DropIndex("dbo.UserSites", new[] { "User_Id" });
DropIndex("dbo.UserSites", new[] { "Site_Id" });
CreateTable(
"dbo.SiteUsers",
c => new
{
Site_Id = c.Guid(nullable: false),
User_Id = c.Guid(nullable: false),
})
.PrimaryKey(t => new { t.Site_Id, t.User_Id })
.ForeignKey("dbo.Sites", t => t.Site_Id, cascadeDelete: true)
.ForeignKey("dbo.Users", t => t.User_Id, cascadeDelete: true)
.Index(t => t.Site_Id)
.Index(t => t.User_Id);
DropTable("dbo.UserSites");
我無法解釋這一點。
自從第一次實施以來,這兩個類都沒有改變......並且我認爲如果我應用這個,我將遭受數據丟失。
所以這個問題(S):
我可以只從遷移腳本刪除此代碼,並繼續使用我現有的結構?
是否有一個我不知道的問題可能導致了這種情況?
任何/所有的援助非常感謝!
編輯:
我只是定義的類如下,並允許按約定建立模型。我已經改變了dbcontext的命名空間,但這就是全部!讓我迷惑不解。
public class User
{
public virtual ICollection<Site> Sites { get; set; }
}
public class Site
{
public virtual ICollection<User> Users { get; set; }
}
我編輯了問題以顯示模型定義。我懷疑你是對的,我會更好地明確定義關係。你認爲我可以在這個發展階段將上述內容添加到模型構建器中嗎?猜猜我會試一試! – paterg
好吧,我不明白爲什麼會發生這種情況,但我已經按照您的建議覆蓋了基於多對多的約定(以便複製我最初自動創建的模式),並且這已經得到了Drop-造成我身上的混亂。 – paterg
我很高興它有幫助 –