【问题标题】:Many to many relation MVC ASP.NET多对多关系 MVC ASP.NET
【发布时间】:2017-08-08 14:28:05
【问题描述】:

我想使用实体框架 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; }
    }
}

【问题讨论】:

  • 'It failed' 对问题的描述很差。你有什么具体的错误吗?

标签: entity-framework ef-code-first


【解决方案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; }
}

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多