2012-09-25 62 views
4

我被ET 4.1生成的用戶模型DB第一種方法 - 我做了DB頭:刪除/添加自reffering「朋友」利用實體框架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'中的人時,他會出現在'請求'中。該數據被strored在「Friend_requests」表wchich樣子:

ProposerId(COL1)RecipientId(COL2)

和兩列按用戶ID與用戶表的關係 - 這是多對多。

我的問題是從「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 - >當用戶是投保人
請求 - >當用戶是收件人

問題仍然在於如何添加新的「Friend請求」以及如何刪除它們?

+4

你的'Friend_requests'表中的'ProposerId'和'RecipientId'這兩個主鍵? – Slauma

+0

不,他們只是來自用戶表的FK。兩者都通過UserId(2個鍵)與User表關聯。我不能讓它們都PK,如果它們與用戶中的同一列有關係...我想製作一些類似「transiton表」的表,但有兩個表不是3,因爲兩列都與同一個表相關:/如果需要我可以繪製一些數據庫模式:) –

+0

但它可能是你的例外,列不是主鍵的原因。我不明白你爲什麼不能讓他們成爲PK的說法。複合主鍵只會禁止同一對ProposerId和RecipientId可能出現多次(這對您的模型和每個多對多關係都有意義,無論是否自引用)。 – Slauma

回答

0

當然作爲expubienced ET用戶的Slauma從一開始就是正確的。沒有鑰匙在朋友桌上它不會工作。現在添加/刪除元素正常工作,因爲我以前寫。 Juts使用像正常列表。瞭解你自己的錯誤:)

+1

啊,所以@Slauma是ET用戶?這解釋了他的空靈答案。 –

+0

不錯的@Gret阿諾德 –