我有一個可枚舉實體集合被添加到數據庫,但它似乎需要一些轉換。任何人都可以將我指向正確的方向嗎?如何從IEnumerable集合中添加對象到數據庫?
bool InsertDetails(DataTable detailTable, string fileName)
{
using (SunseapEBTContext context = new SunseapEBTContext())
{
if (InsertMaster(fileName))//if creating master record successful
{
int masterId = GetSPReadingM(m => m.FileName == fileName).SPReadingMasterId; //get MasterID of file uploaded
var details = detailTable.AsEnumerable().Select(row => new LeasingSPReadingDetailEntity()//new entity from datatable
{
//SPReadingId = row.Field<long>("ProductID"),
SPReadingMasterId = masterId,
BillCycleYear = int.Parse(row.Field<int>("Bill Cycle").ToString().Substring(0, 4)),
BillCycleMonth = byte.Parse(row.Field<byte>("Bill Cycle").ToString().Substring(4))
});
foreach(IEnumerable<LeasingSPReadingDetailEntity> detail in details)
{
context.LeasingSPReadingDetailEntities.AddObject(detail);
}
context.SaveChanges();
}
return true;
}
}
在foreach循環,會引發異常
CS1503參數1:無法從 'System.Collections.Generic.IEnumerable' 轉換爲「SunseapEBT.Domain.BillingModule.LeasingContract.Entity.LeasingSPReadingDetailEntity 「
LeasingSPReadingDetailEntity類:
public class LeasingSPReadingDetailEntity
{
public long SPReadingId { get; set; }
public int SPReadingMasterId { get; set; }
public int BillCycleYear { get; set; }
public byte BillCycleMonth { get; set; }
}
更多信息: 上傳包含詳細信息的文件,並將在一個表中創建主記錄。文件中的細節將被添加到一個單獨的表中,第一個表中自動生成masterId
。該問題無法將詳細信息添加到數據庫中。
編輯: 我發現了爲什麼出現錯誤。該錯誤是由於該文件的內容。有些行沒有輸入值,最後一行沒有遵循其餘行的格式,因爲它顯示了總行數。感謝所有的幫助!
你使用哪個版本的EF?在EF6中,您可以使用.AddRange方法:context.LeasingSPReadingDetailEntities.AddRange(details); – Developer
你有什麼問題?從我所知道的情況來看,列舉'details'(在'foreach'中)給出'LeasingSPReadingDetailEntity'對象,而不是'IEnumerable' –
slawekwin
你在哪裏得到異常? – RBT