‫پیغام خطاهای معروف NHibernate – قسمت اول

یکی از معروف‌ترین خطاهای NHibernate خطای زیر است:

No row with the given identifier exists[EntityName#rec_id]
به جای EntityName نام کامل entity و به جای ‎#rec_id شماره رکورد قرار می‌گیرد. این خطا همان طور که پیغامش اشاره می‌کند وقتی به وقوع می‌پیوندد که NH در دیتابیس به دنبال رکورد خاصی می‌گشته ولی آن رکورد در دیتابیس وجود نداشته است. معمولاً می‌توان ردی از Load یا Get را هم در StackTrace پیدا کرد. گاهی اوقات که rec_id چیز عجیب و غریبی باشد، این پیغام خطا گمراه کننده‌تر هم می‌شود. خصوصاً وقتی که از idهای نوع Guid استفاده شده باشد.

این پیغام خطا معمولاً خیلی زیاد به وجود می‌آید. بسیاری از کاربران، خصوصاً آنها که آشنایی کمتری با NH یا ORMها به طور کلی دارند، با دیدن این پیغام خطا دچار اشتباه شده و فکر می‌کنند NH دچار مشکل خاصی شده که باید با تلاش فراوان آن را حل کرد. این خطا در Data Binding صفحات ASP.NET هم خیلی زیاد دیده می‌شود. خصوصاً وقتی که ترتیب Bind کنترل‌ها به هم خورده و کنترلی زودتر از موقع DataBind شده. است. چیزی که خیلی مهم است این است که این پیغام خطا فقط نشانه است که کسی از NH خواسته که رکوردی را از دیتابیس فراخوانی کند. این مشکل NH نیست که آن رکورد وجود ندارد، بلکه خود برنامه باید بررسی گردد تا علت فراخوانی از دیتابیس مشخص گردد.