在Fluent NHibernate中使用遗留数据库和SchemaAction
本文关键字:数据库 SchemaAction Fluent NHibernate | 更新日期: 2023-09-27 17:50:44
我有两个类:
public class User
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class Report
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual User User { get; set; }
}
…其中,类User
已经是数据库中的一个现有表。现在,我想将Report
作为表添加到数据库中,为此我计划使用Fluent NHibernate。我正在映射User
和Report
,因为我希望User
可以从Report
类访问。User
和Report
是一对多的关系。
我已经有将SQL脚本导出到数据库的测试,User
包含在这些测试中。现在我还想导出由FNH生成的脚本,但我不希望FNH生成User
,因为它已经在数据库中了。
因此,我可以在User
的映射中指定SchemaAction.None()
。这使得FNH不为User
生成脚本,只为Result
生成脚本。唯一的问题是,表Report
中没有生成外键。如何使FNH不为User
导出生成的脚本,但仍然为表Report
导出外键?
如果不指定SchemaAction,则创建表User
和Report
,并生成Report
中的外键
- 复制旧的/现有的模式到一个新的数据库
- 用你的映射和现有的数据库创建一个NHibernate配置
-
使用以下代码将更新脚本写入文件
using (var file = new StreamWriter("SchemaUpdateScript.txt")) { new SchemaUpdate(config).Execute(file.WriteLine, false); }
-
仔细检查更新脚本是否真的是你想要的
点1。是可选的。我强烈建议不要在生产环境中直接使用schemupdate。