C#学习教程:FluentNHibernate:使用NotFound.Ignore()映射引用时的性能损失由于参照完整性对于遗留数据库有点不好,我想知道是否有解决方法或者是否有我可以使用的替代映射。示例://加载实体时无查询References(x=>x.User,"UserId").LazyLoad().Nullable();//当我加载我的实体时执行一百个查询References(x=>x.User,"UserId").LazyLoad().Nullable().NotFound.Ignore();不幸的是,这是一个已知问题,NHibernateJIRA(https://nhibernate.jira.com/browse/NH-1001)存在问题,虽然有解决方法,但并不完美。在实体中你需要做这样的事情:classEntity{privateint?_用户身份;私人用户用户;publicUserUser{get{if(_userId==null)返回null;返回用户;};设置{如果(值==null)_userId=null;else_userId=value.UserId;_user=值;};在映射中,您可以在不设置not-found=ignore的情况下照常映射引用,但您也可以映射外键字段:References(Reveal.Membmer("_user"),"UserId").LazyLoad();Map(Reveal.Membmer("_userId")).Nullable().Not.Update().Not.Insert();//禁止更新和插入,以免它们与User的映射冲突。基本上你让NHibernate在_user字段上正常运行,然后手动对_userId字段进行空检查。这样就避免了N+1选择问题。缺点是它会使实体复杂化并使查询更难编写。例如,如果您希望能够在LINQ查询中使用User-property,则必须公开内部_user字段并使用它。以上是C#学习教程:FluentNHibernate:使用NotFound.Ignore()映射引用所有共享内容时的性能惩罚。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
