我正在考虑使用实体框架数据库优先方法。有问题的数据库使用各种非标准技术,例如"非正式"外键。我想确认,即使无法识别所有关系,仍然可以从此数据库创建可用的 EF 模型?
是的,你可以这样做。 正常从数据库生成模型,然后修改生成的实体以引入关系。 需要设置 Null 数据库初始值设定项,以告知 EF 不应尝试更新数据库以匹配其模型:
Database.SetInitializer(new NullDatabaseInitializer<MyContext>());
不需要数据库中存在外键来匹配模型 - 只要在实体上添加了导航属性,EF 就会相应地生成正确的 SQL 查询。
我建议使用 [ForeignKey]
属性来阐明外键字段的名称,以便它们不符合 EF 的预期模式(或者您可以相应地修改约定)。 例如。。。
public class Child {
// ...
public int Parent_ID { get; set; } // <-- non-standard name
// Add these to introduce the navigation property without a formal relationship
[ForeignKey("Parent_ID")]
public virtual Parent Parent { get; set; }
}
我已经在完全没有外键的MySQL数据库上使用过这种方法。