2016-08-15 167 views
0

我創建了以下兩類:表自動創建記錄時,另一個表得到一個新的記錄

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); 
} 
+4

在你的QuoteGeneral表上使用INSERT觸發器 – 2016-08-15 11:57:14

+0

插入觸發器後使用 – TheGameiswar

回答

3

由於QuoteGeneralID是一個外鍵進入QuoteGeneral表,你可以簡單地創建QuoteProduction記錄:

var qp = new QuoteProduction 
{ 
    QuoteGeneral = quoteGeneral 
}; 

quoteGeneral對象不具有已先保存。

然後,當您保存quoteGeneral記錄時,關聯的QuoteProduction記錄將同時保存。

+0

工作就像一個魅力。 – Linger

1

我想在QuoteProduction表中自動創建一個記錄,每當一個進入QuoteGeneral表。

Create trigger trg_test 
on dbo.QuoteGeneral 
after insert 
as 
begin 

Set nocount on 

insert into dbo.QuoteProduction 
select requiredcolumns 
from 
inserted i 

End 
+0

觸發器可以在visual studio中首先使用代碼創建嗎?或者我將不得不手動添加觸發器到數據庫? – Linger

+0

+1以獲得有效的解決方案。但是,如果數據庫在開發階段被刪除並重新創建,我不想手動創建觸發器。 – Linger

0

執行.SaveChanges()後,您應該能夠獲取該對象的ID,然後使用它來添加子表。

相關問題