两个不同的实体引用同一个实体 Ef Core

HMZ

我对此有点困惑,我正在实施一个愿望清单,其中多个用户可以将相同的实体(产品)添加到他们的列表中。我扩展了身份用户类并添加了一个ICollection<Product>但我似乎无法弄清楚多个用户如何在外键方面引用同一产品,因为每当用户将产品添加到他们的愿望清单时,它就会从以前的用户中删除外键现在引用新用户。显然我的逻辑有缺陷,我误解了应该如何定义这种关系,你能指出我正确的方向吗?

这是产品实体

    public class Product
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Key]
        public int ProductId { get; set; }
        public string ProductName { get; set; }
        public virtual ProductType ProductType { get; set; }

        [ForeignKey("Category")]
        public int SubcategoryFK { get; set; }
        public virtual SubCategory Category { get; set; }
        public decimal Price { get; set; }
        public int NumberOfItems { get; set; }
        public string ImageUrl { get; set; }
        public string IsInStock { get; set; }
        public string ShortDescription { get; set; }
        public string LongDescription { get; set; }

        [ForeignKey("SalesUser")]
        public string SalesUserFK { get; set; }
        public virtual ApplicationUser SalesUser { get; set; }

并且关系是这样配置的

 modelBuilder.Entity<ApplicationUser>()
 .HasMany(a => a.Products)
 .WithOne(p => p.SalesUser).HasForeignKey(z => z.SalesUserFK).OnDelete(DeleteBehavior.ClientSetNull);

Xueli Chen

作为箕评论,关系ProductUser是许多一对多。在 EF Core 中,尚不支持没有实体类来表示连接表的多对多关系。但是,您可以通过为连接表包含一个实体类并映射两个单独的一对多关系来表示多对多关系。

public class Product
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public virtual ProductType ProductType { get; set; }

    [ForeignKey("Category")]
    public int SubcategoryFK { get; set; }
    public virtual SubCategory Category { get; set; }
    public decimal Price { get; set; }
    public int NumberOfItems { get; set; }
    public string ImageUrl { get; set; }
    public string IsInStock { get; set; }
    public string ShortDescription { get; set; }
    public string LongDescription { get; set; }

    public List<UserProduct> UserProducts { get; set; }
}

public class ApplicationUser:IdentityUser
{
    public List<UserProduct> UserProducts { get; set; }
}

public class UserProduct
{
    public int ProductId { get; set; }
    public Product Product { get; set; }

    public Guid ApplicationUserId { get; set; }

    public ApplicationUser ApplicationUser { get; set; }
}

数据库上下文:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserProduct>()
            .HasKey(up => new { up.ProductId, up.ApplicationUserId });

        modelBuilder.Entity<UserProduct>()
            .HasOne(up => up.Product)
            .WithMany(p => p.UserProducts)
            .HasForeignKey(up => up.ProductId);

        modelBuilder.Entity<UserProduct>()
            .HasOne(up => up.ApplicationUser)
            .WithMany(au => au.UserProducts)
            .HasForeignKey(up => up.ApplicationUserId);
    }

参考:多对多关系级联删除

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF Core 无法将具有两个导航属性的实体更新为同一对象(其他实体)

来自分类Dev

EF Core 2.0 当基于实体列表计算属性时,它需要两个 SaveChanges()

来自分类Dev

如何映射两个都附加到EF Core 3中其他单个实体的嵌套实体

来自分类Dev

EF Core 5.0如何使用一个通用存储库管理多个实体类

来自分类Dev

EF Core - 实体映射配置

来自分类Dev

EF Core:无法跟踪实体类型的实例,因为另一个具有相同键值的实例

来自分类Dev

在EF Core中联接两个表,列名无效

来自分类Dev

EF Core-两个表中的IdentityUser映射

来自分类Dev

EF Core:更新实体而不先查询

来自分类Dev

只读表/实体EF Core 3.0

来自分类Dev

在EF Core中添加或更新实体

来自分类Dev

EF Core 访问嵌套嵌套实体

来自分类Dev

EF 代码优先:如何将两个实体的数据保存在一个表中?

来自分类Dev

如果删除两个EF实体之间的两个关系之一,另一个会被删除吗?

来自分类Dev

C#EF6代码优先TPH-导航到使用注释侵犯同一实体的两个实体的属性

来自分类Dev

多个请求而不是 EF Core 中的一个

来自分类Dev

EF Core:同一实体之间存在多个多对多关系

来自分类Dev

EF Core获取记录,其中两个属性与列表中的一对属性匹配

来自分类Dev

EF Core>删除实体(软删除)>实体状态保持不变

来自分类Dev

EF Core:更新对象图重复子实体

来自分类Dev

EF Core-不加载所有子实体

来自分类Dev

使用Include加载相关数据实体ef Core 3.1

来自分类Dev

如何使用EF Core中的DbContext基类访问实体?

来自分类Dev

EF Core 3.0:实体中的多个导航属性

来自分类Dev

软删除EF Core中的嵌套实体

来自分类Dev

对EF Core中的所有实体运行查询

来自分类Dev

EF Core 更新无法跟踪实体类型“广告”的实例

来自分类Dev

从 EF Core 中的子实体获取最大值

来自分类Dev

EF Core 是否可以在非最高投影中跟踪实体?

Related 相关文章

  1. 1

    EF Core 无法将具有两个导航属性的实体更新为同一对象(其他实体)

  2. 2

    EF Core 2.0 当基于实体列表计算属性时,它需要两个 SaveChanges()

  3. 3

    如何映射两个都附加到EF Core 3中其他单个实体的嵌套实体

  4. 4

    EF Core 5.0如何使用一个通用存储库管理多个实体类

  5. 5

    EF Core - 实体映射配置

  6. 6

    EF Core:无法跟踪实体类型的实例,因为另一个具有相同键值的实例

  7. 7

    在EF Core中联接两个表,列名无效

  8. 8

    EF Core-两个表中的IdentityUser映射

  9. 9

    EF Core:更新实体而不先查询

  10. 10

    只读表/实体EF Core 3.0

  11. 11

    在EF Core中添加或更新实体

  12. 12

    EF Core 访问嵌套嵌套实体

  13. 13

    EF 代码优先:如何将两个实体的数据保存在一个表中?

  14. 14

    如果删除两个EF实体之间的两个关系之一,另一个会被删除吗?

  15. 15

    C#EF6代码优先TPH-导航到使用注释侵犯同一实体的两个实体的属性

  16. 16

    多个请求而不是 EF Core 中的一个

  17. 17

    EF Core:同一实体之间存在多个多对多关系

  18. 18

    EF Core获取记录,其中两个属性与列表中的一对属性匹配

  19. 19

    EF Core>删除实体(软删除)>实体状态保持不变

  20. 20

    EF Core:更新对象图重复子实体

  21. 21

    EF Core-不加载所有子实体

  22. 22

    使用Include加载相关数据实体ef Core 3.1

  23. 23

    如何使用EF Core中的DbContext基类访问实体?

  24. 24

    EF Core 3.0:实体中的多个导航属性

  25. 25

    软删除EF Core中的嵌套实体

  26. 26

    对EF Core中的所有实体运行查询

  27. 27

    EF Core 更新无法跟踪实体类型“广告”的实例

  28. 28

    从 EF Core 中的子实体获取最大值

  29. 29

    EF Core 是否可以在非最高投影中跟踪实体?

热门标签

归档