我正在开发一个asp.net应用程序。我需要帮助设计数据库相关模型和linq查询。
我有三个表(和两个查找表)。
1)产品标题(产品标题ID为主键) 2)产品详细信息(产品标题ID为外键) 3)产品附件(产品详细ID为外键)
现在,我需要在db中插入记录。
a)对于一个产品标题记录,可以有多个产品详细记录 b)对于多个产品详细记录,可以有多个附件。
我为每个表创建了三个实体。产品标题还有来自用户表和历史表的两个键。但在视图中我需要显示用户名而不是键。我应该创建一个视图模型类,它将所有这些实体类作为属性保存,如何确保在产品标题中插入第一条记录,然后是产品详细信息,然后是产品附件?
请建议。
由于
答案 0 :(得分:1)
一种简单的方法是使用EF 4.1附带的新代码优先功能
您可以像这样创建“实体”:
public class ProductHeader
{
public int ID {get; set;}
public virtual ICollection<ProductDetail> ProductDetails {get; set;}
//Other properties
}
public class ProductDetail
{
public int ID {get; set;}
public virtual ICollection<ProductAttachment> ProductAttachments {get; set;}
//Other properties
}
public class ProductAttachment
{
public int ID {get; set;}
// you can have a navigation property here for the user, this allows you to access his name
public virtual User User {get; set;}
//Other properties
}
public class MyContext:DbContext
{
public DbSet<ProductHeader> ProductHeaders {get; set;}
public DbSet<ProductDetail> ProductDetails {get; set;}
public DbSet<ProductAttachment> ProductAttachment {get; set;}
}
对于广告订单,只需添加您的ProductHeader(在向其添加ProductDetails和ProductAttachments之后),EF将负责处理。
修改强>: 这是添加ProductHeader的示例代码:
var context=new MyContext();
var ph=new ProductHeader();
ph.User=user;
var pd=new ProductDetail();
pd.ProductAttachments.Add(new ProductAttachment());
ph.ProductDetails.Add(pd);
context.ProductHeaders.Add(ph);
context.SaveChanges();
希望这有帮助。