gpt4 book ai didi

entity-framework-4 - Remove() 不适用于 Entity Framework 中的多对多关系

转载 作者:行者123 更新时间:2023-12-04 07:53:42 25 4
gpt4 key购买 nike

我试图从 Entity Framework 中的集合中删除一个对象,但不幸的是我的代码失败了。如果您能看看我是否能弄清楚我做错了什么,请告诉我,我将不胜感激。我的对象如下:

  • 人 <-> 徽章(多对多关系)
  • 徽章 <-> 徽章要求(一对​​多关系)
  • 人包含一个 ICollection 徽章
  • 徽章包含一个 ICollection
  • BadgeRequirement 包含一个徽章 外键

  • 添加和编辑条目绝对正常。

    但是,当我尝试使用以下代码从 Person 中删除徽章时,它不起作用:
    Postback event handler on example.aspx
    ****The person object has been loaded as part of the load event on the page****

    Badge badge = BadgeHelper.getBadge(badgeID);
    if (command == "Delete")
    {
    PersonHelper.removeBadgeFromPerson(badge, person);
    }

    Delete method on PersonHelper class (wrapper for all processing)

    person.Badges.Remove(badge);
    DbContext.SaveChanges();

    Remove(badge) 返回 false,我无法对此进行分析,因为我使用的是 SQL Compact 4.0

    在此先感谢您的帮助!

    最佳答案

    这实际上是在 MSDN 论坛之一中解决的。完整的详细信息可以在链接 here 上找到。

    但是,总而言之,要使用 Remove() 方法,需要在发生任何更改之前加载多对多关系中的两个集合。代码示例附在下面:

    class Program  {
    static void Main(string[] args)
    {
    using (var context= new MyContext())
    {
    var post1 = context.Posts.Find(3);
    var tag1 = context.Tags.Find(2);
    context.Entry(post1).Collection("Tags").Load();
    post1.Tags.Remove(tag1);
    context.SaveChanges();
    }
    }
    }
    public class Post
    {
    public int PostId { get; set; }
    public string PostContext { get; set; }
    public ICollection<Tag> Tags { get; set; }
    }
    public class Tag
    {
    public int TagId { get; set; }
    public string TagContext { get; set; }
    public ICollection<Post> Posts { get; set; }
    }
    public class MyContext:DbContext
    {
    public DbSet<Post> Posts { get; set; }
    public DbSet<Tag> Tags { get; set; }
    }

    我希望这可以帮助其他有类似问题的人。

    关于entity-framework-4 - Remove() 不适用于 Entity Framework 中的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688915/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com