nhibernate, строка была обновлена ​​или удалена другой транзакцией (или отображение несохраненного значения было неверным) - PullRequest
2 голосов
/ 23 октября 2019

При вставке новой информации возникает ошибка. При обновлении существующей информации проблем не возникает. Также нет проблем при помещении той же информации в БД без использования кода. Тестовые коды не пытаются хранить одну и ту же информацию в одно и то же время.

файл сопоставления

<class name="FileInfo" table="update_list" dynamic-update="true" >
    <cache usage="read-write"/>
    <id name="Name" type="string">
      <generator class="native" />
    </id>
    <property name="Version" />
    <property name="pkg" />
    <property name="UpdateDate" />
    <property name="Size" />
    <property name="Path" />
    <property name="AutoUpdate" type="TrueFalse" />
  </class>

сущность

public class FileInfo
    {
        public virtual string Name { get; set; }
        public virtual string Version { get; set; }
        public virtual string pkg { get; set; }
        public virtual DateTime UpdateDate { get; set; }
        public virtual double Size { get; set; }
        public virtual string Path { get; set; }
        public virtual bool AutoUpdate { get; set; }
    }

сохраняющая часть

using (var db = Database.Open())
using (var trans = db.BeginTransaction())
            {
                FileInfo new_file = FileInfoDao.Get(db).GetBypkgName(postedFile.FileName);
                if (new_file == null)
                {
                    new_file = new FileInfo();
                }
                new_file.Name = postedFile.FileName;
                new_file.Size = postedFile.ContentLength;
                new_file.Path = filePath;
                new_file.UpdateDate = DateTime.Now;
                new_file.AutoUpdate = true;
                var info = apkHelper.GetInfo(filePath);
                new_file.pkg = info.Value.Item1;
                new_file.Version = info.Value.Item2;
                try
                {
                    db.SaveOrUpdate(new_file);
                    trans.Commit();
                }
                catch (Exception e)
                {
                    log.Error(e);
                }
}

1 Ответ

1 голос
/ 23 октября 2019

Ваше имя - ваш ПК, и вы определяете

<generator class="native" />  

, но вы устанавливаете new_file.Name ... попробуйте использовать

<generator class="assigned" />

, отметьте все параметры: https://www.javatpoint.com/generator-classes

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