Как мне сопоставить таблицу только для вставки с NHibernate? - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть сценарий, где у меня есть родительский класс с некоторыми определениями, которые мы можем вызвать, если 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 ]

2 голосов
/ 12 ноября 2009

Посмотрите на изменяемое свойство элемента класса. В соответствии с документацией установка в значение false предотвращает UPDATE и DELETE

2 голосов
/ 12 ноября 2009

В Fluent вы можете вызвать свойство Readonly, которое отображается на атрибут access="readonly".

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

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

Я никогда не использовал его, поэтому я не уверен, что он будет работать для того, что вам нужно.

0 голосов
/ 12 ноября 2009

Вы можете использовать пустые теги <sql-update> и <sql-delete> в вашем отображении. они должны вызываться, когда класс пытается обновить или удалить. но nhibernate все равно должен делать вставку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...