【发布时间】:2012-12-18 17:06:24
【问题描述】:
我有两个班级:
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 将在未来节省时间。
-
我非常喜欢使用 NHibernate。但到目前为止,我从未在生产场景中使用过 SchemaExport,因为我发现在修改架构时,通常需要额外的 ad-hoc SQL 来适应现有数据。
标签: c# nhibernate fluent-nhibernate