我创建了以下两个类:
public class QuoteGeneral
{
public int QuoteGeneralID { get; set; }
public QuoteStatus Status { get; set; }
//Code and annotation removed for clarity
public int? QuoteCustomerID { get; set; }
public virtual QuoteCustomer QuoteCustomer { get; set; }
public virtual QuoteProduction QuoteProduction { get; set; }
}
public class QuoteProduction
{
public int QuoteGeneralID { get; set; }
public int testrun { get; set; }
public virtual QuoteGeneral QuoteGeneral { get; set; }
}
然后我补充道:
modelBuilder.Entity<QuoteProduction>()
.HasKey(e => e.QuoteGeneralID);
modelBuilder.Entity<QuoteGeneral>()
.HasOptional(s => s.QuoteProduction)
.WithRequired(ad => ad.QuoteGeneral);
将QuoteProduction.QuoteGeneralID
字段设置为主键和外键。所以,现在生成数据库时,它看起来像是:
我希望只要在QuoteProduction
表中输入一条记录,就会在QuoteGeneral
表中自动创建记录。这可能吗?或者,我必须自己添加吗?如果我必须自己添加,那么捕获QuoteGeneralID
值的最佳方法是什么?我不认为SELECT MAX(QuoteGeneralID) FROM QuoteGeneral
总是可靠的,因为我可能有很多用户在使用数据库,而且它可能会提取错误的值。
编辑:对我有用的东西(以供将来可能帮助其他人)
public ActionResult Create([Bind(Include = "list of bind fields")] QuoteGeneral quoteGeneral)
{
if (ModelState.IsValid)
{
db.QuoteGenerals.Add(quoteGeneral);
var qp = new QuoteProduction
{
QuoteGeneralID = quoteGeneral.QuoteGeneralID
};
db.QuoteProductions.Add(qp);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(quoteGeneral);
}
答案 0 :(得分:3)
由于QuoteGeneralID是QuoteGeneral表中的外键,您只需创建QuoteProduction记录:
var qp = new QuoteProduction
{
QuoteGeneral = quoteGeneral
};
不必先保存quoteGeneral
对象。
然后,当您保存quoteGeneral
记录时,相关的QuoteProduction
记录将同时保存。
答案 1 :(得分:1)
我希望只要在QuoteGeneral表中输入一条记录,就会在QuoteProduction表中自动创建记录。
Create trigger trg_test
on dbo.QuoteGeneral
after insert
as
begin
Set nocount on
insert into dbo.QuoteProduction
select requiredcolumns
from
inserted i
End
答案 2 :(得分:0)
执行.SaveChanges()之后,您应该能够获取该对象的id,然后使用它来添加子表。