在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。我正在映射UserReport,因为我希望User可以从Report类访问。UserReport是一对多的关系。

我已经有将SQL脚本导出到数据库的测试,User包含在这些测试中。现在我还想导出由FNH生成的脚本,但我不希望FNH生成User,因为它已经在数据库中了。

因此,我可以在User的映射中指定SchemaAction.None()。这使得FNH不为User生成脚本,只为Result生成脚本。唯一的问题是,表Report中没有生成外键。如何使FNH不为User导出生成的脚本,但仍然为表Report导出外键?

如果不指定SchemaAction,则创建表UserReport,并生成Report中的外键

在Fluent NHibernate中使用遗留数据库和SchemaAction

  1. 复制旧的/现有的模式到一个新的数据库
  2. 用你的映射和现有的数据库创建一个NHibernate配置
  3. 使用以下代码将更新脚本写入文件

    using (var file = new StreamWriter("SchemaUpdateScript.txt"))
    {
        new SchemaUpdate(config).Execute(file.WriteLine, false);
    }
    
  4. 仔细检查更新脚本是否真的是你想要的

点1。是可选的。我强烈建议不要在生产环境中直接使用schemupdate。