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