如何在EF中将多对一关系改为多对多关系

时间:2012-08-21 11:53:40

标签: c# .net entity-framework

我在网上有一个简单的公司目录。它由包含项目的类别组成。他们现在有一些项目适合两个类别,并希望显示两个类别中的一个项目。

目前模特看起来像这样

public class Category {
    public virtual ICollection<Item> Items { get; set; }
}

public class Item {
    /* No reference to no category */
}

很久以前生成的数据库链接了Item-table中的类别。所以现在如果我在最后添加一个项目到两个类别我添加了“计数”。

我想在没有任何数据丢失的情况下更改此设置。我该怎么办?请注意,我可以更改我喜欢的数据库结构。

2 个答案:

答案 0 :(得分:0)

您需要创建一个新表

ItemCategories 
   ItemID,
   CategoryID

并添加与Item和Category表的关系

然后使用每个项目的categoryID填充此表

即(在SQL中)

Insert ItemCategories (ItemID, CategoryID)
select itemid, categoryid from items

然后从Items表中删除CategoryID,并重新生成模型

答案 1 :(得分:0)

我最终创建了数据库的备份并使用dataloss强制更新数据库并使用

          modelBuilder
            .Entity<Category>()
            .HasMany(c => c.Items)
            .WithMany()
            ;

然后创建一个sql脚本以将数据丢失插入到右表中