【问题标题】:1 to many relationship isn't resulting in what I'd expect一对多的关系并没有达到我的预期
【发布时间】: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(产品和类别)连接在一起。我希望有一个带有ProductIdCategoryId 的新表,但事实并非如此。相反,它只是在 Category 表中创建一个ProductId

如何让 EF 创建一个将两者连接在一起的表,而无需创建新的DbSet&lt;T&gt;

【问题讨论】:

  • 你想要的是不合逻辑的。您描述的关系是一对多的,EF 的行为与预期完全一致。没有连接表,因为Product.Categories 直接代表连接。顺便说一句,始终初始化您的集合属性:ICollection&lt;Category&gt; Categories { get; set; } = new HashSet&lt;Category&gt;();

标签: c# entity-framework migration ef-code-first


【解决方案1】:

这就是它应该的样子。
示例:
产品 1 鸡肉
类别 1 肉类 idProduct = 1
类别 2 健康 idProduct = 1

等等...
对于一对多的关系,您不需要另一个表。该表仅对多对多有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 2021-10-15
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多