你不必那样做。事实上你不应该因为你可以让你的对象处于不一致的状态。假设您有:
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
。