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

时间:2013-01-04 09:11:03

标签: c# nhibernate fluent-nhibernate

我有两个班级:

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; }
}

...其中class User已经是数据库中的现有表。现在,我想将Report作为表添加到数据库中,为此我计划使用Fluent NHibernate。我正在映射UserReport,因为我希望User类可以访问ReportUserReport之间存在一对多的关系。

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

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

如果我没有指定SchemaAction,则会创建表UserReport,并生成Report中的外键。

1 个答案:

答案 0 :(得分:1)

  1. 将旧/现有架构复制到新数据库
  2. 使用您的映射和现有数据库创建NHibernate配置
  3. 使用此代码将更新脚本写入文件

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

  5. 第1点是可选的。我强烈反对在生产环境中直接使用SchemaUpdate。