2009-11-12 40 views
0

我有一个场景,我有一个父类,并带有一些我们可以调用的定义,如果Foo是唯一的,然后是我选择调用Bar的子类。他们一起做Foo吧! :)如何映射NHibernate插入表?

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版本表中的每个更改都应该导致插入?

回答

2

看看class元素的mutable属性。根据documentation,将其设置为false可防止更新和删除

+0

而且你在哪里! – mhenrixon

2

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

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

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

虽然我从来没有使用它,所以我不确定它会为你需要的工作。

+0

乔希将其称为Mutable。我更喜欢他们没有改变流利的所有名字:) – mhenrixon

0

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