Pergunta

Estou experimentando algum comportamento estranho com Nibernate. Estou recuperando uma lista de alunos de um repositório, atualizando -os conforme necessário, o mais estranho é que, quando salvo o primeiro, as alterações feitas para todos os alunos estão sendo comprometidas com o banco de dados.

        [Transaction]
        public void UpdateLearner(Learner learner)
        {
            //UnitOfWork.CurrentSession.Save(learner);
        }

Alguma idéia do porquê? Eu não tenho cache ativado. Sei que tem algo a ver com a transação, à medida que as alterações são persistidas, mesmo com a chamada para o método de salvamento comentado.

Este é o meu mapeamento:

<class name="Learner"  table="ILR_Learner">
    <id name="Id" column="ILRLearnerID">
      <generator class="native" />
    </id>
    <property column="LastWarning" name="LastWarning" type="DateTime" />
    <property column="Submitted" name="SuccessfulSubmission" type="DateTime" />

    <join table="vwLearnerLSCUpload">
      <key column="ILRLearnerID" foreign-key="ILRLearnerID"/>
      <property column="Dog" type="DateTime" name="Dog"/>
    </join>

    <join table="Learner">
      <key column="Id" foreign-key="ILRLearnerID"/>
      <property column="Food" name="Food" type="String" length="20" />
    </join>

  </class>
Foi útil?

Solução

Ao atualizar as entidades, as alterações são rastreadas automaticamente. Portanto, quando a transação é comprometida, todas as entidades alteradas são persistidas. Não há necessidade de ligar:

Session.Save(entity);

Veja isso Pergunta.

Para desativar o rastreamento de mudanças por entidade, você deve despejar a entidade da sessão:

Session.Evict(entity);

Para persistir qualquer alteração, você ligaria:

Session.Update(entity);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top