2011-11-21 90 views
0

我想創建以下關係。很顯然,這是基本的痛苦,但由於EF的緣故,我在第一個障礙中墮落。在我的數據庫SubForm的主鍵Id中,是一個引用Application.Id(強制關係)的外鍵。當我添加一個新的Application EF抱怨說我沒有SubForm_Id行,我不希望這樣做,因爲這顯然是主鍵的副本。我可以添加一些註釋到模型中來解決這個問題嗎?1 to 0..1 Relationship In Entity Framework

這使我想到另外一個問題,如果我想用一個新SubForm添加一個新的Application在同一時間的數據庫 - 我怎麼可能得到Application Id(它在定義db作爲自動增量int)將其設置在SubForm對象上,或者EF可以爲我做這個嗎?

幫助將不勝感激。

+0

您可以將兩者兼而有之? – Eranga

+0

是的這是正確的 – greenimpala

回答

3

EF按照慣例假設你Application表有一個標量屬性SubForm_Id當你有SubForm類型的導航性能。您需要明確配置共享主鍵映射。

public class MyContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Application>() 
      .HasOptional(a => a.SubForm) 
      .WithRequired(s => s.Application); 
    } 
} 

如您使用的EF 4.1的DbContext API如下

var app = new Application(); 
var subForm = new SubForm { Application = app }; 
db.SubForms.Add(subForm); 
db.SaveChanges(); 
+0

這工作,謝謝你。我假設它不是**可能添加根實體應用程序並添加SubForm對象作爲結果?如果這是正確的,爲什麼會出現這種情況? – greenimpala

+1

@ st3它可能工作'var app = new Application {SubForm = new SubForm()}; db.Applications.Add(app);' – Eranga