Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除/添加“自我引用”;“朋友”;使用实体框架4.1-DB优先方法_C#_Asp.net Mvc_Entity Framework 4.1 - Fatal编程技术网

C# 删除/添加“自我引用”;“朋友”;使用实体框架4.1-DB优先方法

C# 删除/添加“自我引用”;“朋友”;使用实体框架4.1-DB优先方法,c#,asp.net-mvc,entity-framework-4.1,C#,Asp.net Mvc,Entity Framework 4.1,我得到了由ET 4.1生成的用户模型-我首先生成了DB: public partial class User { public User() { this.Photos = new HashSet<Photo>(); this.Posts = new HashSet<Post>(); this.My_requests = new HashSet<User>(); this.Requ

我得到了由ET 4.1生成的用户模型-我首先生成了DB:

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; }
}
但这当然是错误的,它给了我一个错误:

无法更新EntitySet“Friends\u Request”,因为它有元素定义查询,而元素中没有可以处理此操作的元素

我的问题是:
如何删除以及如何将行添加到表“Friend_Requests”

编辑:

表关系:

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


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

当然,作为一名经验丰富的EF用户,Slauma从一开始就很正确。如果朋友桌上没有钥匙,它就不会工作。添加/删除元素现在和我之前写的一样正常工作。就像普通列表一样使用。自知错误:)

在您的
Friend\u请求
表中,
ProposerId
RecipientId
都是主键吗?不,它们只是用户表中的FK。两者都通过UserId(2个键)与用户表建立关系。如果它们与用户中的同一列相关,我不能使它们都PK。。。我想制作一些类似于“transiton table”的表,但有2个表而不是3个表,因为这两个列都与同一个表相关:/If need我可以绘制一些数据库模式:),但这可能是您出现异常的原因,因为这些列不是主键。我不明白你为什么不能把它们做成PKs。复合主键只会禁止同一对
ProposerId
RecipientId
出现多次(这在您的模型和每一个多对多关系中都是有意义的,无论是否为自引用)。真为我感到羞耻。。。我确信我设置了主键,但当我花了太多时间(编辑、删除、重新创建表)试图解决这个问题时,我忘记了再次设置主键。现在,两列上都有复合键,用户表col Id上都有2个关系,我可以像普通列表一样轻松地添加/删除元素。非常感谢Slauma-对自己的错误吹毛求疵是最好的;)不错的一个@Gret Arnold
User User2 = GetUserInfo(UserId2);
context.Users.Where(u => u.Id.Equals(UserId1)).SingleOrDefault().Requests.Remove(User2);
context.SaveChanges();