你不必這樣做。事實上,你不應該因爲你可以讓你的對象處於不一致的狀態。假設您有:
public class Category {
public Int32 Id { get; set; }
}
public class SomeClass {
public Int32 Id { get; set; }
public virtual Category Category { get; set; }
}
這是有效的。您只需告知EF在其配置中如何找到外鍵。根據上述內容,它會嘗試使用SomeClass.Category_Id
,但您可以隨意更改它。
編輯:如果你想改變外鍵,你可以通過添加配置類和OnModelCreating
事件過程中添加它這樣做的:
internal class ForSomeClassEntities : EntityTypeConfiguration<SomeClass> {
public ForSomeClassEntities(String schemaName) {
this.HasRequired(e => e.Category)
.WithMany()
.Map(map => map.MapKey("CategoryId"));
this.ToTable("SomeClass", schemaName);
}
}
在你重寫Context
類:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations
.Add(new ForSomeClassEntities("SomeSchema"))
;
}
使用上面相同的類會告訴EF尋找名爲SomeClass.CategoryId
的外鍵屬性。
你不需要兩個:http://stackoverflow.com/a/5282275/270591+在答案的末尾的鏈接。兩個鏈接更多:http://stackoverflow.com/questions/4703378/ef4-independent-associations-why-avoid-them和http://stackoverflow.com/questions/9253234/what-is-the-point-of-創建外鍵關鍵屬性當使用實體框架 – Slauma 2012-08-08 15:20:20
@Slauma,謝謝你的額外信息。這真的有助於澄清一些 - 我沒有意識到這些是不同類型的關聯。如果您將其作爲答案張貼,我想接受它。 – ametren 2012-08-08 17:07:00
你應該接受@ Yuck的回答。他非常清楚地解釋說,你*可以在沒有FK屬性的情況下工作,舉例和一切,這是你的問題,他回答了。我只對「你不應該」使用FK屬性有一點否決權。但這更像是一場有爭議的辯論。你會發現人們說「你應該」的同樣經常的答案。 – Slauma 2012-08-08 18:35:40