我首先使用 EF 5.0 代码,通过 PM 控制台使用自动迁移。
我正在尝试将第四次迁移应用于项目,并且基于约定的链接表命名导致它们被删除并使用不同的名称重新创建。在之前的任何迁移过程中都没有发生这种情况。
例子 :
我有 2 个类用户和站点。
初始创建迁移
按照惯例,这创建了一个名为“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");
我无法解释这一点。
自第一次实施以来,这两个类都没有改变......我想如果我应用它,我将遭受数据丢失。
所以对于问题:
我可以从迁移脚本中删除此代码并继续使用我现有的结构吗?
是否有一个我不知道的问题可能导致了这种情况?
非常感谢任何/所有帮助!
编辑:
我只是简单地定义了如下类,并允许按照约定构建模型。我已经更改了 dbcontext 的命名空间,但仅此而已!让我迷惑不解。
public class User
{
public virtual ICollection<Site> Sites { get; set; }
}
public class Site
{
public virtual ICollection<User> Users { get; set; }
}