这是我的错误:
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)
该系统的一个用户偶然发现此错误,这对我来说完全没有意义。我所知道的:
知道为什么会这样吗?请指教!
改述我的Qn:
我知道这个错误意味着什么,但是我似乎并没有弄清楚是什么导致了错过的用户行?我已将它全部放在Cascade.ALL上。我不认为这与删除有关。上述可能出现的情况有哪些?
编辑2:
请参考FNH的映射:有任何问题吗?
public void Override(AutoMapping<Teacher> mapping)
{
mapping.References(x => x.User).Cascade.All().Not.LazyLoad();
}
谢谢!
答案 0 :(得分:4)
我将'Not Found'属性设置为'Ignore'
答案 1 :(得分:2)
在Fluent NHibernate for C#中,我使用了
HasManyToMany(x => x.Bars).Table("foobars")
.ParentKeyColumn("FooId")
.ChildKeyColumn("Id")
.NotFound.Ignore();
答案 2 :(得分:1)
我猜你错过了数据库中的FK约束,否则你不会在FK关系上丢失任何记录。在数据库中添加FK和Cascade规则,然后就不会有任何“缺少行异常”。当您尝试执行与数据库模型不一致的操作时,将引发错误。
答案 3 :(得分: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设置为Ignore ...
private static void Mapper_OnBeforeMapManyToOne(IModelInspector modelInspector, PropertyPath propertyPath, IManyToOneMapper manyToOneMapper) {
manyToOneMapper.NotFound(NotFoundMode.Ignore);
}
答案 4 :(得分:0)
如果您使用的是.hbm.xml
映射文件,那么&#34;未找到&#34;设置可以应用于映射,例如
<many-to-one name="User" column="User" not-found="ignore" />