【问题标题】:How to prevent creating relations by EntityFramework Core如何防止 EntityFramework Core 创建关系
【发布时间】:2020-05-03 21:35:58
【问题描述】:

我正在制作一个商店项目。

我创建了一个产品类:

        public Guid Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        public string Description { get; set; }
        public string PhotoUrl { get; set; }
        public int Quantity { get; set; }

还有一个 Order 类:

        public Guid Id { get; set; }
        public List<Product> Products { get; set; }
        public decimal TotalPrice { get; set; }
        //address
        public string Street { get; set; }
        public string HouseNumber { get; set; }
        public string PostCode { get; set; }
        public string City { get; set; }
        public Order()
        {
            Products = new List<Product>();
        }

正如您在 Order.cs 中看到的,有一个产品列表,但实体框架始终在我的产品和订单之间设置关系,但我只想将产品添加到此列表中,而没有关系。 作为回应,我想得到这样的东西

{
"id" :"someID",
"products": [
{
first product
},
{
second product
}]
}

等等。如何防止通过 ef 关系创建并做简单的列表? 或者我怎样才能建立多产品与多订单的关系?

【问题讨论】:

    标签: c# asp.net entity-framework entity-framework-core


    【解决方案1】:

    您可以将 NotMapped 属性添加到 Property:

    ...  
    [NotMapped]
    public List<Product> Products { get; set; }
    ...
    

    您需要导入 System.ComponentModel.DataAnnotations

    【讨论】:

    • 好的,关系问题已解决。但它仍然没有在数据库中创建列表,我无法向该列表添加任何内容
    • 如果我手动添加以在 Migrations 中创建一个列表,我会收到错误消息“无法为具有 CLR 类型列表的属性“easycatch.core.models.order.products”找到到关系类型的映射
    • 请回复下面的@huancz 答案并相应更新您的问题。目前尚不清楚为什么您首先需要将它们解耦
    【解决方案2】:

    要么我遗漏了一些东西,要么你正在尝试做一些没有多大意义的事情。你说没有关系 - 但你确实想将 Order 和它的 Products 都保存到数据库中?这意味着存在关系(1:N 种)并且 EF 创建它是正确的。没有它就无法工作。

    您没有包含您期望的完整输出,只有带有 first_productsecond_product 占位符的 Order 部分。如果占位符看起来像您的 Product 类,只需让 EF 创建关系即可。如果您希望它们在 JSON 中看起来不同(例如省略一些属性),您仍然应该让 EF 创建关系,然后编写从您的实体类(产品、订单)到 DTO 类(ProductDTO 和具有 @ 的 OrderDTO)的转换987654323@)。无论如何,这是一个很好的做法,即使实体和 DTO 匹配 1:1,在实际项目中它也很少会长时间保持这种状态。

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 2017-03-14
      • 2019-02-09
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多