2016-03-03 20:55 GMT+00:00 Steve Lyle <[email protected]>:
> I don't know what the challenge is but I would like to think the top level
> exception message could be:
> "can't find your file (probably because of a typo in ...)" fix that then
> "can't find the assembly (probably because of a typo in ...)" fix that
> then
> "can't find the namespace (probably because of a typo in ...)" and so
> on.
> Why can't the most important and probably always the most frequent and
> relevant error be the first dataum presented, the outer exception message?
> Maybe it is a java thing but I rarely need to go into innerexceptions
> anymore.
>
.Net is structured around "nested" exceptions. The idea is that the inner
most code can encounter something like "file not found" but that exception
in itself does NOT help much because in a large system there could be
hundreds of places where such an exception could occur. The idea is that a
slightly higher level of the application can add an outer exception with
more context information. Then an even higher level can add yet another
outer exception with even higher level contextutal information to describe
during what high level task the low level problem occurred.
This is the way .Net is designed and we're not going to work against that
in NHibernate because it would be to go against the guidelines. I do wish
Microsoft would have made this thing more prominent in the documentation -
there is FAR too much code out there that just grabs ex.Message (and
sometime ex.Stacktrace), completely ignoring the chain of inner exceptions.
Stackoverflow is full of questions that would never have needed to be asked
if the poster had just known about or bothered to check the inner exception
first. There really should have been a readonly ex.MessageFull or something
to make you stop and think even if you're just using VS Intellisense to
guide you.
As for why/how you get null in the InnerException I don't think I will
spend much time to guess. One thing to beware of is that if the code in
your catch-handler does something wrong, it will throw a new exception,
thereby completely hiding the existence of the first exceptions. When this
happens it can be very baffling and tricky to figure out.
/Oskar
>
>
>
>
>
> On Tuesday, March 1, 2016 at 5:55:02 PM UTC-5, Steve Lyle wrote:
>
>> This line of code:
>> cfg.AddFile(@"C:\Users\slyle\Documents\Visual Studio
>> 2015\Projects\Cat\Cat\Models\Cat.hbm.xml");
>>
>> Throws this error:
>> An exception of type 'NHibernate.MappingException' occurred
>> in NHibernate.dll but was not handled in user code
>> Additional information: Could not compile the mapping
>> document: C:\Users\slyle\Documents\Visual Studio
>> 2015\Projects\Cat\Cat\Models\Cat.hbm.xml
>>
>> Why?
>> It is as if AddFile() can't find *C:\Users\slyle\Documents\Visual Studio
>> 2015\Projects\Cat\Cat\Models\Cat.hbm.xml*
>> In fact, if I intentionally inject a typo in the path to the file I get
>> the same error.
>> However this line of code, immediately preceding AddFile(), doesn't have
>> any problems.
>> cfg.Configure(@"C:\Users\slyle\Documents\Visual Studio
>> 2015\Projects\Cat\Cat\Models\hibernate.cfg.xml");
>> I also find if I define the configuration in Web.config then there isn't
>> any trouble.
>> If I don't include the path-file literal in Configure() then the
>> hibernate.cfg.xml file will successfully be searched for and found in the
>> bin\ folder ~ kind of as a undocumented default.
>> But <mapping>.hbm.xml file/s are not afforded the same bin\ folder
>> courtesy.
>>
>> Understand this is code from the "QuickStart" taken right off of the
>> nHibernate website
>> and I have literally tried to many ways to get this to work that I'm
>> resorting to you, my 4th level of support.
>>
>> I understand by documentation and by construction nHibernate
>> confguration() has about 12 different ways to load mappings.
>> And I'd like to believe if one works then all others will work alike.
>> Personally I believe the "Embedded Resource" option is contrary to
>> flexibility and therefore contrary good application management.
>> Sadly, the "Embedded Resource" option seems to be the only way to make
>> nHibernate work.
>> And worse than all this is poor error reporting.
>> Shortcomings and underdevelopment all really buts enterprise adoption of
>> nHibernate into question.
>> Is this thing really meant to be something - or is it only a toy?
>>
>> -----
>> This is the mapping file:
>> <?xml version="1.0" encoding="utf-8" ?>
>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>> namespace="QuickStart" assembly="QuickStart">
>> <class name="Cat" table="Cat">
>> <!-- id name="Id"><column name="ID" sql-type="int" not-null="true"
>> /><generator class="identity" /></id -->
>> <id name="Id"><column name="CatId" sql-type="char(32)"
>> not-null="true"/><generator class="uuid.hex" /></id>
>> <property name="Name"><column name="Name" length="16" not-null="true"
>> /></property>
>> <property name="Sex" />
>> <property name="Weight" />
>> </class>
>> </hibernate-mapping>
>> -----
>>
>> -----
>> This is the c# model:
>> using System;
>> using System.Collections.Generic;
>> using System.Linq;
>> using System.Web;
>>
>> namespace QuickStart
>> {
>> public class Cat
>> {
>> private string id;
>> private string name;
>> private char sex;
>> private float weight;
>>
>> public Cat(){}
>>
>> public virtual string Id { get { return id; } set { id = value; }
>> }
>> public virtual string Name { get { return name; } set { name =
>> value; } }
>> public virtual char Sex { get { return sex; } set { sex = value;
>> } }
>> public virtual float Weight { get { return weight; } set { weight
>> = value; } }
>> }
>> }
>> -----
>>
>>
>> -----
>> And this is the table DDL:
>> CREATE TABLE [dbo].[Cat](
>> [CatId] [char](32) NOT NULL,
>> [Name] [nvarchar](16) NOT NULL,
>> [Sex] [nchar](1) NULL,
>> [Weight] [real] NULL,
>> CONSTRAINT [PK_Cat] PRIMARY KEY CLUSTERED
>> (
>> [CatId] ASC
>> )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
>> OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
>> ) ON [PRIMARY]
>> -----
>>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/nhusers.
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.