我使用EF 6.1代碼第一,並試圖定義一個類發票的,可以由多個時間表實例的。從一個執行關聯到很多與代碼第一個實體框架
我想要做的是在數據庫中插入一個新的發票行,並且更新 Timesheet表,以便InvoiceId的外鍵從NULL更改爲新創建的Id發票。 不幸的是,正在發生的事情,而不是在於新行插入時間表表,而這些都與新生成的發票關聯。
我的類別是:
public class TimeSheet
{
public int Id { get; set; }
public DateTime WeekStart { get; set; }
public List<TimeSheetLine> TimeSheetLines { get; set; }
public int? InvoiceId { get; set; }
public virtual Invoice Invoice { get; set; }
}
public class Invoice
{
public int Id { get; set; }
public int? AgencyId { get; set; }
public int? ClientId { get; set; }
public int Rate { get; set; }
public Client Client { get; set; }
public Agency Agency { get; set; }
public List<TimeSheet> Timesheets { get; set; }
}
和映射類:
public class TimeSheetMap : EntityTypeConfiguration<TimeSheet>
{
public TimeSheetMap()
{
this.HasKey(x => x.Id);
this.ToTable("TimeSheet");
this.HasOptional(x => x.Invoice)
.WithMany(x => x.Timesheets)
.HasForeignKey(x => x.InvoiceId);
}
}
編輯 代碼來構建發票對象:
public bool GenerateInvoice(InvoiceVM invoice)
{
//create an Invoice record from the InvoiceVM
Invoice inv = new Invoice();
List<TimeSheet> sheets = new List<TimeSheet>();
foreach (var item in invoice.TimesheetList)
{
TimeSheet ts = manager.GetTimesheetById(item.Id);
sheets.Add(ts);
}
inv.Timesheets = sheets;
//save the invoice
manager.GenerateInvoice(inv);
return true;
}
編輯2毫安nager class
public bool GenerateInvoice(Invoice invoice)
{
bool ret = false;
using (DataContext dc = new DataContext())
{
dc.Invoices.Add(invoice);
dc.SaveChanges();
ret = true;
}
return ret;
}
任何明顯的變化,我可以讓這個工作?
你可以在哪裏做代碼發票對象的實際創建? –
聽起來像您正在使用的TimeSheets不是來自數據庫(換句話說,沒有附加到上下文) – tschmit007
已添加發票對象創建代碼。它保存時肯定有正確的時間表ID。 – jazza1000