2015-06-05 16 views
0

У меня есть таблица, называемая цитатой, у которой много сервисов, у каждой службы есть много сотрудников.Entity Framework Добавление всех дочерних объектов

quote: 
    public int Id {get; set;} 
    pbulic ICollection<Services> services {get;set} 

Services: 
    public int Id {get;set;} 
    public int QuoteId {get;set;} 
    [ForeignKey("QutoeId")] 
    public Quote quote {get;set;} 
    public ICollection<Staff> Staff {get;set;} 

Staff: 
    public Int Id {get;set;} 
    public ServiceId {get;set; 
    [ForeignKey("StaffId")] 
    public Service service {get;set;} 
    public string StaffName {get;set;} 

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

У меня есть проблема., Я хочу, чтобы сохранить таблицы в базу данных. У меня есть ЦЕНА объект, с большим количеством услуг со многими сотрудниками.

ли я itterate через их все, чтобы добавить их вручную в базу данных

Я просто попробовал:..

dbContext.Quote.Add(quote); 
dbContext.SaveChanges(); 

однако это только сохранить ЦЕНУ таблицу в базе данных, а не таблицы детей должен ли я делать somethi ng глупый как:

foreach (var staff in Quote.Services.Staff) 
{ 
    dbContext.Staff.Add(staff) 
} 
foreach (var service in Quote.Services) 
{ 
    dbContext.Services.Add(services) 
} 
+0

пожалуйста, вы можете занять несколько минут и форматировать Ваш код? – wahwahwah

ответ

0

Вы должны просто добавить дочерние таблицы как к dbcontext, так и к его родительскому. Вы можете попробовать это, как указано ниже:

dbContext.Quote.Add(quote); 
foreach (var service in Quote.Services) 
{ 
    quote.services .Add(service); 
    dbContext.Services.Add(service); 
} 
dbContext.SaveChanges(); 

Аналогично добавить объект персонала к его родительскому объекту обслуживания и DbContext а

+0

Спасибо. Я сделал это так. Я просто убедился, что нет возможности сделать это каскадом автоматически. – michael

+0

Обычно EF выполняет итерацию и создает новые объекты (объект не привязан к контексту). И.Е. вам нужно прочитать связанные объекты (например, службы) из базы данных, или EF добавит одну и ту же услугу 2 раза (ну не ваш случай, потому что все идентификаторы автогенерируются, но если идентификаторы являются строкой, то это происходит). В любом случае, ваш код не является правильным кодом (отсутствует различное виртуальное ключевое слово), и я также предлагаю использовать свободный интерфейс для настройки по крайней мере отношений. В этом случае вы можете не вставлять QuoteId и ServiceId в классы. – bubi

Смежные вопросы