Entity Framework — представление таблицы ссылок

#c# #entity-framework-6

#c# #entity-framework-6

Вопрос:

Я новичок в Entity Framework. Я использую подход, основанный на базе данных, и я не создаю файлы объектов автоматически. У меня есть 3 таблицы User , Database и UserDatabase . Таблица UserDatabase имеет отношение «многие ко многим» с обоими User и Database . Я не уверен, как построить эти отношения в моем классе.

 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; }
}
  

Это мой текущий код. Если я добавлю одну базу данных для каждого пользователя, она будет работать нормально. Но если я добавлю несколько, это вызовет ошибку нарушения ограничения множественности. Пожалуйста, помогите.

Комментарии:

1. Значит, у одного пользователя может быть много баз данных? Должна быть база данных пользователя. База данных — это список <База данных>?

Ответ №1:

Я обнаружил ошибку. В таблице ссылок «База данных пользователя» я упомянул 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; }
}
  

Ответ №2:

Попробуйте изменить свой 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; }
}