NHibernate - пример кода для обновления - PullRequest
0 голосов
/ 30 июня 2011

Я целый день пытался сохранить один из своих объектов с версиями, но безрезультатно.Пожалуйста, укажите, что я делаю неправильно, так как я пытался 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 ]

2 голосов
/ 30 июня 2011

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

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() для принудительного выполнения операций базы данных.

0 голосов
/ 21 мая 2014

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

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