我使用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