2012-11-01 38 views
4

這裏是我的錯誤:NHibernate.ObjectNotFoundException:與給定的標識符的行存在

NHibernate.ObjectNotFoundException: No row with the given identifier exists[Project.Core.Entities.User#(GUID)] 
at Hibernate.Impl.SessionFactoryImpl.DefaultEntityNotFoundDelegate.HandleEntityNotFound(String entityName, Object id) 
at NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) 

一個系統的用戶偶然發現收到此錯誤,這沒有任何意義對我來說完全是。我所知道的:

  1. 一個教師表REFERENCES一個用戶表。
  2. 某種程度上,Teacher表有一行引用用戶表中的一行,但該行不存在於用戶表中。

任何想法爲什麼會發生這種情況?請指教!

重組我QN:

我知道什麼是錯誤的意思,但是我似乎沒有搞清楚是什麼原因造成丟失的用戶行?我已將它全部放在Cascade.ALL上。我不認爲這與刪除有關。上述可能發生的情況是什麼?

編輯2:

請通過FNH參考映射:任何問題嗎?

public void Override(AutoMapping<Teacher> mapping) 
    { 
     mapping.References(x => x.User).Cascade.All().Not.LazyLoad(); 
    } 

謝謝!

+0

錯誤消息似乎足夠清晰。你能詳細說明你已經做了什麼來解決這個問題或不清楚什麼嗎?用戶是否在表中? –

+0

@OskarBerggren,輕微的改寫。 :) – RicL

回答

1

我想你錯過了你的數據庫中的FK約束,否則你將不會有FK關係上的任何遺漏記錄。在你的數據庫中添加FK和Cascade規則,那麼你就不會有任何'丟失行異常'。當您嘗試執行與您的數據庫模型不符的內容時,將會引發錯誤。

+0

嗨,我已經添加了一部分FNH映射。任何映射錯誤?請提供建議。謝謝! – RicL

+1

數據庫中是否定義了外鍵關係? –

4

我設置了 '未找到' 屬性 '忽略'

0

試一下......

public void Override(ModelMapper modelMapper) { 
    modelMapper.Class<T>(c => { 
     c.ManyToOne(m => m.FKObj, r => { 
      r.Column("FKColumn"); 
      r.NotFound(NotFoundMode.Ignore); // THIS IS IMPORTANT!!! 
     }); 
    }); 
} 

或者這...如果你有一個 「約定」 的文件...

首先處理BeforeMapManyToOne事件:

mapper.BeforeMapManyToOne += Mapper_OnBeforeMapManyToOne; 

,然後設置NOTFOUND默認情況下忽略...

private static void Mapper_OnBeforeMapManyToOne(IModelInspector modelInspector, PropertyPath propertyPath, IManyToOneMapper manyToOneMapper) { 
    manyToOneMapper.NotFound(NotFoundMode.Ignore); 
} 
2

在功能NHibernate的C#,我如果您使用的是.hbm.xml映射文件,則「未找到」設置可以在那裏被應用於映射,如使用過

HasManyToMany(x => x.Bars).Table("foobars") 
         .ParentKeyColumn("FooId") 
         .ChildKeyColumn("Id") 
         .NotFound.Ignore(); 
0

<many-to-one name="User" column="User" not-found="ignore" />

相關問題