entity framework 数据库优先能否从任何 SQLServer 数据库成功构建模型?
Can entity framework database-first successfully build models from any SQLServer db?
我正在考虑使用 entity framework 数据库优先方法。有问题的数据库使用各种非标准技术,例如 'informal' 外键。我想确认仍然可以从此数据库创建可用的 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 数据库上使用了这种方法。
我正在考虑使用 entity framework 数据库优先方法。有问题的数据库使用各种非标准技术,例如 'informal' 外键。我想确认仍然可以从此数据库创建可用的 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 数据库上使用了这种方法。