当另一个表获取新记录时,自动在表中创建记录

时间:2016-08-15 11:55:01

标签: c# sql-server asp.net-mvc-5

我创建了以下两个类:

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字段设置为主键和外键。所以,现在生成数据库时,它看起来像是:

enter image description here

我希望只要在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);
}

3 个答案:

答案 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,然后使用它来添加子表。