如何使用NHibernate映射仅插入表?

时间:2009-11-12 11:11:14

标签: nhibernate fluent-nhibernate

我有一个场景,我有一个父类,如果Foo是唯一的,我们可以调用一些定义,然后是我选择调用Bar的子类。他们一起制作Foo Bar! :)

public class Foo
{
    public Foo()
    {
        Bars = new List<Bar>();
    }

    // Internal id only, should probably not even map it
    public virtual int Id { get; set; } 
    // A hashed searchable id
    public virtual string UId { get; set; } 
    public virtual DateTime CreatedAt { get; set; }
    public virtual DateTime UpdatedAt { get; set; }

    public ICollection<Bar> Bars { get; private set; }
}

public class Bar
{
    public virtual int Id { get; set; }
    public virtual long Version { get; set; }
    public virtual DateTime CreatedAt { get; set; }
    public virtual SomeHash { get; set; }
    public virtual Foo Foo { get; set; }
}

我可以很容易地用xml来映射这个。我不知道如何映射的是以下场景:我不需要在这里更新任何内容。一旦发生变化,我应该插入一个新行。永远不会更新或删除,我找不到任何有关解决此问题的信息,即使我知道这确实可行。如何告诉NHibernate版本表中的每个更改都应该导致插入?

3 个答案:

答案 0 :(得分:2)

在Fluent中,您可以调用Readonly属性,该属性映射到access="readonly"属性。

public class FooMap : ClassMap<Foo>
{
    public FooMap()
    {
        ReadOnly();

        Id(x => x.Id).ReadOnly();
        // etc.
    }
}

我从来没有使用它,所以我不确定它能否满足您的需求。

答案 1 :(得分:2)

看一下class元素的mutable属性。根据{{​​3}},将其设置为false可防止UPDATE和DELETE

答案 2 :(得分:0)

您可以在映射中使用空白<sql-update><sql-delete>标记。这些应该在类尝试更新或删除时调用。但是nhibernate仍然应该插入