实体框架 - 链接表表示

时间:2016-10-13 13:31:18

标签: c# entity-framework-6

我是Entity Framework的新手。我使用数据库第一种方法,我不会自动生成实体文件。我有3个表UserDatabaseUserDatabase。表格UserDatabaseUserDatabase具有多对多关系。我不确定如何在班上建立这种关系。

public class Database
{
    [Key]
    public int DatabaseId { get; set; }

    public string DatabaseName { get; set; }
}

public class User
{
    [Key]
    public int? UserID { get; set; }

    [Required]
    public string Name{ get; set; }
}

public class UserDatabase
{
    [Key]
    public int UserID { get; set; }

    [ForeignKey("UserID")]
    public virtual User Users{ get; set; }

    public int DatabaseID { get; set; }

    [ForeignKey("DatabaseID")]
    public virtual Database Database { get; set; }
}

这是我目前的代码。如果我为每个用户添加一个数据库,它工作正常。但是如果我添加多个,它会抛出多重约束违规错误。请帮忙。

2 个答案:

答案 0 :(得分:0)

我发现了这个错误。在链接表“UserDatabase”中,我提到了UserID作为主键,这就是我无法添加多个记录的原因。它应该是一个复合键,我已将用户和数据库标记为键并给出了顺序。我把它改成了

public class UserDatabase
{
    [Key, Column(Order=0)]
    public int UserID { get; set; }

    [ForeignKey("UserID")]
    public virtual User Users{ get; set; }

    [Key, Column(Order=1)]
    public int DatabaseID { get; set; }

    [ForeignKey("DatabaseID")]
    public virtual Database Database { get; set; }
}

答案 1 :(得分:0)

尝试将UserDatabase修改为以下内容:

public class UserDatabase
{
    [ForeignKey("Users")]
    public int UserID { get; set; }

    [ForeignKey("Database")]
    public int DatabaseID { get; set; }

    public virtual User Users{ get; set; }
    public virtual Database Database { get; set; }
}