#c# #database #sqlite #entity-framework-core
#c# #База данных #sqlite #entity-framework-core
Вопрос:
Я разрабатываю WPF desktop application
with Microsoft.EntityFrameworkCore.Sqlite
, и у меня есть эта сущность Room
, у которой есть многозначный атрибут NotAvailableTimes
, который может быть множественным NotAvailableTimes
для одной комнаты. Я пытался реализовать список, но, согласно моим исследованиям, EFCORE этого не поддерживает. Есть ли какой-нибудь простой способ реализовать это?
Я даже пытался создать другую сущность и добавить отношение «один ко многим» между двумя сущностями, но я не знаю, как вставить данные в список первой сущности.
Класс комнаты
public class Room
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public String Rid { get; set; }
public Building BuildingAS { get; set; }
public String Type { get; set; }
public int Capacity { get; set; }
public IList<RoomNAT> RoomNATs { get; set; }
public virtual ICollection<RoomLecturer> RoomLecturers { get; set; }
public virtual ICollection<RoomSubject> RoomSubjects { get; set; }
}
мой класс-оболочка
public class RoomNAT
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public String StartTime { get; set; }
public String EndTime { get; set; }
public String Day { get; set; }
}
Ответ №1:
В основном такой же, как RoomLectures
: сделайте его ICollection и пометьте его как виртуальный. Это действительно отношение «один ко многим».
public virtual ICollection<RoomNATs> RoomNATs { get; set; }
После этого вам потребуется перенести / обновить базу данных, поскольку она сгенерирует таблицу, содержащую информацию.
Что касается этой части:
Я даже пытался создать другую сущность и добавить отношение «один ко многим» между двумя сущностями, но я не знаю, как вставить данные в список первой сущности.
Это также похоже на обычные вставки:
_context.Rooms.RoomNATs.Add(new RoomNAT() {
//init properties
});
_context.SaveChanges();
Ответ №2:
Вы не можете сопоставить его в базе данных, если его виртуальное свойство не сделает его виртуальным, он должен работать нормально и сделать roomNats отдельной таблицей, а также добавить ограничение внешнего ключа.
public class RoomNAT
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public String StartTime { get; set; }
public String EndTime { get; set; }
public String Day { get; set; }
public virtual ICollection<Room> Rooms{ get; set; }
}
public class Room
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public String Rid { get; set; }
public Building BuildingAS { get; set; }
public String Type { get; set; }
public int Capacity { get; set; }
public virtual RoomNAT RoomNATs { get; set; }
public virtual ICollection<RoomLecturer> RoomLecturers { get; set; }
public virtual ICollection<RoomSubject> RoomSubjects { get; set; }
}
Здесь отношение один ко многим
, если вы хотите, чтобы многие к одному или многие ко многим, вы можете изменить его на Ilist сейчас