【发布时间】:2021-01-18 19:02:30
【问题描述】:
在一个产品可以有许多类别的情况下,我尝试使用代码优先来创建它,我有一个 Product 模型,它有一个 Category 集合,如下所示:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Category> Categories { get; set; }
}
我的分类如下:
public class Category
{
public Category(CategoryEnum @enum)
{
Id = (int)@enum;
Name = @enum.ToString();
}
public Category() { }
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Name { get; set; }
public static implicit operator Category(CategoryEnum @enum) => new Category(@enum);
public static implicit operator CategoryEnum(Category category) => (CategoryEnum)category.Id;
}
创建迁移然后更新数据库不会为此创建新表以将 2(产品和类别)连接在一起。我希望有一个带有ProductId 和CategoryId 的新表,但事实并非如此。相反,它只是在 Category 表中创建一个ProductId?
如何让 EF 创建一个将两者连接在一起的表,而无需创建新的DbSet<T>
【问题讨论】:
-
你想要的是不合逻辑的。您描述的关系是一对多的,EF 的行为与预期完全一致。没有连接表,因为
Product.Categories直接代表连接。顺便说一句,始终初始化您的集合属性:ICollection<Category> Categories { get; set; } = new HashSet<Category>();
标签: c# entity-framework migration ef-code-first