2017-08-08 98 views
1

我想先在代碼中創建一個多對多的關係使用實體框架ASP.Net的數據庫,它將來自同一個表。多對多關係MVC ASP.NET

我有用戶,我想讓每個用戶都有自己的朋友(用戶也一樣),但是我無法在代碼優先數據庫中建立這樣的關係。

這是我的課。

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Net; 
using System.Web; 

namespace LMS.Model.Entites 

{ 
    public class user 
    { 
     [Key] 
     public int ID { get; set; } 
     [Required(ErrorMessage ="Please Insert your name")] 
     public string Name { get; set; } 
     [Required(ErrorMessage ="Please insert a valid username")] 
     public string User_Name { get; set; } 
     public string Adress { get; set; } 
     [DataType(DataType.Date)] 
     public string Birthday { get; set; } 
     [Required] 
     [EmailAddress] 
     public string E_Mail { get; set; } 
     [Required(ErrorMessage = "Please insert a valid password")] 
     [MinLength(9)]  
     [DataType(DataType.Password)] 
     public string Password { get; set; } 
     public string Authority { get; set; } 
     public virtual ICollection<user_Friends> friends { get; set; } 
    } 
} 

我試圖做一個新的類作爲一個新的表,使多到很多的關係,但它失敗了。

using LMS.Model.Entites; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace LMS.Model 
{ 
    public class user_Friends 
    { 
     [Key] 
     public virtual user USER1 { get; set; } 
     [ForeignKey("USER1")] 
     public virtual int USER1_ID { get; set; } 
     [Key] 
     public user USER2 { get; set; } 
     [ForeignKey("USER2")] 
     public int USER2_ID { get; set; } 
    } 
} 
+0

'It failed'對問題描述不佳。你有任何具體的錯誤? –

回答

1

user_Friends類,你有兩個引用user類,其中只有一個參考前者。再添加一個參考,以完成類之間的端點連接(在這種情況下,你應該聯合這兩個屬性來獲得全套的朋友):

public class user 
{ 
    //other properties 
    [InverseProperty("USER1")] 
    public virtual ICollection<user_Friends> friendsSide1 { get; set; } 
    [InverseProperty("USER2")] 
    public virtual ICollection<user_Friends> friendsSide2 { get; set; } 
} 

public class user_Friends 
{  
    [Key] 
    [Column(Order = 0)] 
    [ForeignKey("USER1")] 
    public virtual int USER1_ID { get; set; } 
    public virtual user USER1 { get; set; } 

    [Key] 
    [Column(Order = 1)] 
    [ForeignKey("USER2")] 
    public int USER2_ID { get; set; } 
    public virtual user USER2 { get; set; } 
} 

還可以簡化您的解決方案這種方式(不user_Friends類可言,但相應的表格將由EF隱式創建):

public class user 
{ 
    //other properties  
    public virtual ICollection<user> friends { get; set; } 
}