Entity framework 4 仅CTP5 POCO代码,如何将主详细记录添加到数据库
我正在尝试EF CTP5 POCO,并将EF4 EntityModel转换为仅POCO代码的方法Entity framework 4 仅CTP5 POCO代码,如何将主详细记录添加到数据库,entity-framework-4,poco,code-first,entity-framework-ctp5,Entity Framework 4,Poco,Code First,Entity Framework Ctp5,我正在尝试EF CTP5 POCO,并将EF4 EntityModel转换为仅POCO代码的方法 internal class InvoiceContext : DbContext { public DbSet<Invoice> Invoices {get; set;} public DbSet<InvoiceLine> InvoiceLines {get; set;} } public class Invoice { public Guid I
internal class InvoiceContext : DbContext
{
public DbSet<Invoice> Invoices {get; set;}
public DbSet<InvoiceLine> InvoiceLines {get; set;}
}
public class Invoice
{
public Guid InvoiceId { get; set; }
public virtual ICollection<InvoiceLine> Lines { get; set; }
}
public class InvoiceLine
{
public Guid InvoiceLineId { get; set; }
public Guid InvoiceId { get; set; }
public virtual Invoice Header { get; set; }
}
库存线这里有一种方法:
using (var db = new Ctp5Context())
{
var inv = new Invoice()
{
InvoiceId = Guid.NewGuid()
};
var invLine = new InvoiceLine()
{
InvoiceLineId = Guid.NewGuid(),
Header = inv
};
db.InvoiceLines.Add(invLine);
db.SaveChanges();
}
如果希望添加发票对象,则:
using (var db = new Ctp5Context())
{
var invLine = new InvoiceLine()
{
InvoiceLineId = Guid.NewGuid()
};
var inv = new Invoice()
{
InvoiceId = Guid.NewGuid(),
Lines = new List<InvoiceLine>() { invLine}
};
db.Invoices.Add(inv);
db.SaveChanges();
}
使用(var db=new Ctp5Context())
{
var invLine=新发票行()
{
InvoiceLineId=Guid.NewGuid()
};
var inv=新发票()
{
InvoiceId=Guid.NewGuid(),
行=新列表(){invLine}
};
db.发票。添加(库存);
db.SaveChanges();
}
虽然所有这些都有效,但我建议始终在类构造函数中初始化navigation属性集合,这样您就不必每次都在客户端代码中进行初始化,也不会在运行时遇到NullReferenceException:
public class Invoice
{
public Invoice()
{
Lines = new List<InvoiceLine>();
}
public Guid InvoiceId { get; set; }
public virtual ICollection<InvoiceLine> Lines { get; set; }
}
...
using (var db = new Ctp5Context())
{
var invLine = new InvoiceLine()
{
InvoiceLineId = Guid.NewGuid()
};
var inv = new Invoice()
{
InvoiceId = Guid.NewGuid(),
};
inv.Lines.Add(invLine);
db.Invoices.Add(inv);
db.SaveChanges();
}
公共类发票
{
公共发票()
{
行=新列表();
}
公共Guid发票ID{get;set;}
公共虚拟ICollection行{get;set;}
}
...
使用(var db=new Ctp5Context())
{
var invLine=新发票行()
{
InvoiceLineId=Guid.NewGuid()
};
var inv=新发票()
{
InvoiceId=Guid.NewGuid(),
};
存货行添加(存货行);
db.发票。添加(库存);
db.SaveChanges();
}
以下是一种方法:
using (var db = new Ctp5Context())
{
var inv = new Invoice()
{
InvoiceId = Guid.NewGuid()
};
var invLine = new InvoiceLine()
{
InvoiceLineId = Guid.NewGuid(),
Header = inv
};
db.InvoiceLines.Add(invLine);
db.SaveChanges();
}
如果希望添加发票对象,则:
using (var db = new Ctp5Context())
{
var invLine = new InvoiceLine()
{
InvoiceLineId = Guid.NewGuid()
};
var inv = new Invoice()
{
InvoiceId = Guid.NewGuid(),
Lines = new List<InvoiceLine>() { invLine}
};
db.Invoices.Add(inv);
db.SaveChanges();
}
使用(var db=new Ctp5Context())
{
var invLine=新发票行()
{
InvoiceLineId=Guid.NewGuid()
};
var inv=新发票()
{
InvoiceId=Guid.NewGuid(),
行=新列表(){invLine}
};
db.发票。添加(库存);
db.SaveChanges();
}
虽然所有这些都有效,但我建议始终在类构造函数中初始化navigation属性集合,这样您就不必每次都在客户端代码中进行初始化,也不会在运行时遇到NullReferenceException:
public class Invoice
{
public Invoice()
{
Lines = new List<InvoiceLine>();
}
public Guid InvoiceId { get; set; }
public virtual ICollection<InvoiceLine> Lines { get; set; }
}
...
using (var db = new Ctp5Context())
{
var invLine = new InvoiceLine()
{
InvoiceLineId = Guid.NewGuid()
};
var inv = new Invoice()
{
InvoiceId = Guid.NewGuid(),
};
inv.Lines.Add(invLine);
db.Invoices.Add(inv);
db.SaveChanges();
}
公共类发票
{
公共发票()
{
行=新列表();
}
公共Guid发票ID{get;set;}
公共虚拟ICollection行{get;set;}
}
...
使用(var db=new Ctp5Context())
{
var invLine=新发票行()
{
InvoiceLineId=Guid.NewGuid()
};
var inv=新发票()
{
InvoiceId=Guid.NewGuid(),
};
存货行添加(存货行);
db.发票。添加(库存);
db.SaveChanges();
}
我知道我可以做到这一点,但我尝试使用它的方式又如何呢?这是用CTP5和POCO代码处理这种情况的方法吗?谢谢你的帮助,我会尝试传递列表,看看它是否有效。好的,创建列表并添加项目会将子记录保存到数据库中。我知道我可以做到这一点,但我尝试使用它的方式如何,是不是不可能?这是使用CTP5和POCO纯代码方法处理此类场景的方法。我将尝试传递列表,看看它是否有效,谢谢您的帮助。好的,创建列表并添加项将子记录保存到db。