使用Entity Framework 4.1删除/添加自引用“朋友” - DB First方法

时间:2012-09-25 11:03:36

标签: c# asp.net-mvc entity-framework-4.1

我得到了ET 4.1生成的用户模型 - 我首先创建了数据库:

public partial class User
{
    public User()
    {
        this.Photos = new HashSet<Photo>();
        this.Posts = new HashSet<Post>();
        this.My_requests = new HashSet<User>();
        this.Requests = new HashSet<User>();
        this.FriendLeft = new HashSet<User>();
        this.FriendRight = new HashSet<User>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Email { get; set; }
    public string Project { get; set; }
    public string City { get; set; }
    public string Street { get; set; }
    public string House_number { get; set; }
    public string Apartment_number { get; set; }
    public string username { get; set; }
    public string Zip_code { get; set; }

    public virtual ICollection<Photo> Photos { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
    public virtual ICollection<User> My_requests { get; set; }
    public virtual ICollection<User> Requests { get; set; }
    public virtual ICollection<User> FriendLeft { get; set; }
    public virtual ICollection<User> FriendRight { get; set; }
}

每个'用户'都可以邀请其他'用户'成为他的朋友。因此,当有人邀请您时,当您邀请某人出现在“My_requests”中时,他会出现在“请求”中。该数据在'Friend_requests'表格中显示如下:

ProposerId(col1)RecipientId(col2)

并且这两列与UserId的User表有关 - 它是多对多的。

我的问题是从'Friend_request'中删除行,因为EF不会为该表提供上下文,而是生成之前显示的模型...

我尝试过类似的东西:

User User2 = GetUserInfo(UserId2);
context.Users.Where(u => u.Id.Equals(UserId1)).SingleOrDefault().Requests.Remove(User2);
context.SaveChanges();

但那当然是错的,它给了我一个错误:

  

“无法更新EntitySet”Friends_Request“,因为它具有元素DefiningQuery,并且在元素中没有元素,wchich可以处理此操作。”

我的问题是:
我如何删除以及如何向表'Friend_Requests'添加行?

修改

表关系:
enter image description here

在ET生成的模型中,它是:
My_requests - &gt;当用户是提议者时 请求 - &gt;当用户是收件人时

问题仍然是如何添加新的“朋友请求”以及如何删除它们?

1 个答案:

答案 0 :(得分:0)

当然,Slauma作为一名经验丰富的ET用户,从一开始就是正确的。没有Friends表上的键,它将无法正常工作。添加/删除元素现在可以像我之前写的那样正常工作。 Juts像普通List一样使用。了解你自己的错误:))