2016-11-03 59 views
0

我有了這個模型:實體框架發帖記錄

public class FinalizedWebinarAttendeesList 
{ 
    public List<FinalizedWebinar> Webinars { get; set; } 
} 

public class FinalizedWebinar 
{ 
    public int ParticipantID { get; set; } 
    public bool AffidavitRecvd { get; set; } 
    public string EventCode { get; set; } 
} 

這的DbContext:

public class webinarFinalizedAttendeesListDbContext : DbContext 
{ 
    public webinarFinalizedAttendeesListDbContext(string nameOrConnectionString) : base(nameOrConnectionString) { } 
    public DbSet<FinalizedWebinar> WebinarFinalAttendee { get; set; } 
} 

我想整個FinalizedWebinarAttendeesList發送到功能與有互送(如下圖)。 這可能嗎?

public void InsertAttendee(FinalizedWebinar aa) 
{ 
    using (webinarFinalizedAttendeesListDbContext context = new webinarFinalizedAttendeesListDbContext(connectionString)) 
    { 
     context.WebinarFinalAttendee.Add(aa); 
     context.SaveChanges(); 
    } 
} 

回答

0

DbSet<T>有一個.AddRange(IEnumerable<T>)方法,您可以使用:

context.WebinarFinalAttendee.AddRange(attendees); 

更多信息以https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.addrange(v=vs.113).aspx

+0

我真的想把整個列表發送到我的Oracle數據庫中的一個過程,並通過它們循環插入與使用DbContext來添加它們。那可能嗎?如果可以的話,我仍然必須編寫我的Oracle過程。 – MB34

+0

如果你已經在使用實體框架,我不確定你希望通過在Oracle中直接插入來實現。實體框架將爲您照顧。 – UtopiaLtd

+0

由於記錄確實不符合需要插入的數據。這就是爲什麼我不得不編寫一個Oracle存儲過程來執行實際的插入操作。 '我想將整個FinalizedWebinarAttendeesList發送給一個函數,而不必發送它們中的每一個(如下所示)。 ' – MB34

0

當然,爲什麼不呢?適應這個例子中,以更好地滿足您的需求:

public void InsertAttendee(List<FinalizedWebinar> webinars) 
{ 
    using (webinarFinalizedAttendeesListDbContext context = new webinarFinalizedAttendeesListDbContext(connectionString)) 
    { 
     foreach(var webinar in webinars) { 
      context.WebinarFinalAttendee.Add(webinar); 
     } 

     context.SaveChanges(); 
    } 
} 

在實體框架的上下文將記住所有變更跟蹤對象,並保存在一次應用它們。您可以根據需要在上下文中執行儘可能多的操作。

注意:將其推到極限可能會產生不良的性能影響,但只要您在做合理的工作量,一切都應該沒問題。與往常一樣,如果擔心出現問題,請評估性能影響。

+0

這也有遍歷列表中添加他們。我想不必那樣做。 – MB34

0

你想要類似DbSet.AddRange()的東西嗎?您可以將項添加到IEnumerable並將IEnumerable添加到您的DbSet。