NHibernate - пример кода для обновления

Я весь день пытался сохранить один из моих объектов с версиями, но безрезультатно. Пожалуйста, укажите, что я делаю не так, как я пытался SaveOrUpdate, Merge() а также Update() после Clear() вызов.

Бизнес-объект:

 public class MappedTest  
{  
    public virtual Guid TestID { get; set; }  
    public virtual int VersionID { get; set; }  
    public virtual byte[] Content { get; set;}  
    public virtual DateTime DateSaved { get; set; }  
}  

Отображение:

<?xml version="1.0" encoding="utf-8" ?>  
<hibernate-mapping ...>  
 <class name="TestImp.Definition.MappedTest, PythonTest" table="Tests">  
  <id name="TestID" unsaved-value="00000000-0000-0000-0000-000000000000">  
  <generator class="guid"/>  
</id>  
<version name="VersionID" column="VersionID" />  
<property name="Content" column="TestObject" type="BinaryBlob"/>  
<property name="DateSaved" column="Date"/>  


`

Фактический код:

using (var session = new Configuration().Configure().BuildSessionFactory().OpenSession())  
        {  
            using (ITransaction transaction = session.BeginTransaction())  
            {  
                if(session.Get<MappedTest>(mappedTest.TestID) == null)  
                {  
                    session.Save(mappedTest);  
                }  
                else  
                {  
                session.Clear();  
                    session.Update(mappedTest);  
                }  
                transaction.Commit();  
            }  
        }`  

Благодарю.

2 ответа

Решение

Для вставки попробуйте только с:

using (var session = new Configuration().Configure().BuildSessionFactory().OpenSession())  
    {  
        MappedTest mappedTest =new MappedTest();

        using (ITransaction transaction = session.BeginTransaction())  
        {  
            session.SaveOrUpdate(mappedTest);  
            transaction.Commit();  
        }  
    }  

для обновления:

using (var session = new Configuration().Configure().BuildSessionFactory().OpenSession())  
    {  
        MappedTest mappedTest =session.Get<MappedTest>(..an Id..);
        mappedTest.YourProperty="newValue";

        using (ITransaction transaction = session.BeginTransaction())  
        {  
            session.SaveOrUpdate(mappedTest);  
            transaction.Commit();  
        }  
    }  

Если вам это нужно, попробуйте использовать session.Flush() форсировать операции с базой данных.

Еще одна возможность, которая заняла у меня некоторое время, чтобы осознать и еще не освещена в этой теме: в этом случае проверьте, установлен ли ваш маппер на ReadOnly. NHibernate ничего не сообщает, когда его просят сохранить или обновить с помощью маппера ReadOnly.

Другие вопросы по тегам