At this point Alec I think you would be best asking for some help on the
nhibernate users list. I don't know a great deal about the schema generation
tool, and I am simply out of ideas. That second XML looked like it would do
the trick.

Paul Batum

On Wed, Dec 10, 2008 at 1:42 PM, Alec Whittington <
[EMAIL PROTECTED]> wrote:

> Thank you for your reply Paul, here are the results of me making the
> changes;
> Original mapping file:
>
> <?xml version="1.0" encoding="utf-8"?>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"
> assembly="Tubbed.Core" namespace="Tubbed.Core">
>   <class name="ApplicationLog" table="ApplicationLog"
> xmlns="urn:nhibernate-mapping-2.2">
>     <id name="LogEntryID" column="LogEntryID" type="Int32">
>       <generator class="identity" />
>     </id>
>     <property name="Date" column="Date" type="DateTime">
>       <column name="Date" />
>     </property>
>     <property name="Level" column="Level" length="50" type="String">
>       <column name="Level" />
>     </property>
>     <property name="Logger" column="Logger" length="255" type="String">
>       <column name="Logger" />
>     </property>
>     <property name="Message" column="Message" length="100"
> type="StringClob">
>       <column name="Message" sql-type="text" />
>     </property>
>     <property name="Thread" column="Thread" length="50" type="String">
>       <column name="Thread" />
>     </property>
>   </class>
> </hibernate-mapping>
>
> Original SQL output:
>
> create table ApplicationLog (
>   LogEntryID INT IDENTITY NOT NULL,
>    Message NVARCHAR(100) null,
>    Thread NVARCHAR(50) null,
>    Logger NVARCHAR(255) null,
>    Date DATETIME null,
>    Level NVARCHAR(50) null,
>    primary key (LogEntryID)
> )
>
> New mapping file:
>
> <?xml version="1.0" encoding="utf-8"?>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"
> assembly="Tubbed.Core" namespace="Tubbed.Core">
>   <class name="ApplicationLog" table="ApplicationLog"
> xmlns="urn:nhibernate-mapping-2.2">
>     <id name="LogEntryID" column="LogEntryID" type="Int32">
>       <generator class="identity" />
>     </id>
>     <property name="Date" column="Date" type="DateTime">
>       <column name="Date" />
>     </property>
>     <property name="Level" column="Level" length="50" type="String">
>       <column name="Level" />
>     </property>
>     <property name="Logger" column="Logger" length="255" type="String">
>       <column name="Logger" />
>     </property>
>     <property name="Message" column="Message" type="StringClob">
>       <column name="Message" sql-type="text" />
>     </property>
>     <property name="Thread" column="Thread" length="50" type="String">
>       <column name="Thread" />
>     </property>
>   </class>
> </hibernate-mapping>
>
> New SQL Output:
>
> create table ApplicationLog (
>   LogEntryID INT IDENTITY NOT NULL,
>    Message NVARCHAR(255) null,
>    Thread NVARCHAR(50) null,
>    Logger NVARCHAR(255) null,
>    Date DATETIME null,
>    Level NVARCHAR(50) null,
>    primary key (LogEntryID)
> )
>
> So the mapping changed to the correct mapping in the XML and the SQL output
> changed, yet the SQL output is still not correct. The code being used to
> generate the SQL output is this:
>
>         public void CreateSchema()
>         {
>             Configuration cfg = new Configuration().Configure();
>             var persistenceModel = new PersistenceModel();
>
>  persistenceModel.addMappingsFromAssembly(Assembly.Load("Tubbed.Data"));
>             persistenceModel.Configure(cfg);
>             persistenceModel.WriteMappingsTo(@"D:\Tubbed.com\Mappings");
>             new
> SchemaExport(cfg).SetOutputFile(@"c:\tubbed.sql").Create(true, false);
>         }
>
> Seems pretty straight forward, but at this point I am not sure where the
> problem actually lies. It does seem that if a type of StringClob is declared
> with no length, then it should not default one.Then on the other hand, when
> the SQL is generated, with the proper mapping, it is still incorrect.
>
> Alec Whittington
>
>
>
>
>
> On Tue, Dec 9, 2008 at 6:52 PM, Paul Batum <[EMAIL PROTECTED]> wrote:
>
>> Okay the first thing I would try to do is experiment with setting the
>> length to a value that is not going to cause problems. Zero or null would be
>> my first attempts, have you tried those? You wont be able to use the
>> WithLengthOf method to set it to null because it only accepts an integer, so
>> try using SetAttribute.
>>
>> One more thing I would try, you can call AddAlteration and manipulate the
>> xml. So maybe you can do AddAlteration(x => x.RemoveAttribute("length").
>>
>> Paul Batum
>>
>>
>> On Wed, Dec 10, 2008 at 2:28 AM, Alec Whittington <
>> [EMAIL PROTECTED]> wrote:
>>
>>> Here it is Paul,
>>>     as you can see the mapping for the field is correct with regards to
>>> type and sql-type, but a length field has been applied to it. That is
>>> incorrect for a text field in SQL.
>>>
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>>> default-lazy="false" assembly="Tubbed.Core" namespace="Tubbed.Core">
>>>   <class name="ApplicationLog" table="ApplicationLog"
>>> xmlns="urn:nhibernate-mapping-2.2">
>>>     <id name="LogEntryID" column="LogEntryID" type="Int32">
>>>       <generator class="identity" />
>>>     </id>
>>>     <property name="Date" column="Date" type="DateTime">
>>>       <column name="Date" />
>>>     </property>
>>>     <property name="Level" column="Level" length="50" type="String">
>>>       <column name="Level" />
>>>     </property>
>>>     <property name="Logger" column="Logger" length="255" type="String">
>>>       <column name="Logger" />
>>>     </property>
>>>     <property name="Message" column="Message" length="100"
>>> type="StringClob">
>>>       <column name="Message" sql-type="text" />
>>>     </property>
>>>     <property name="Thread" column="Thread" length="50" type="String">
>>>       <column name="Thread" />
>>>     </property>
>>>   </class>
>>> </hibernate-mapping>
>>>
>>>
>>> Mapping File:
>>>
>>>     public class ApplicationLogMap : ClassMap<ApplicationLog>
>>>      {
>>>         public ApplicationLogMap()
>>>         {
>>>             WithTable("ApplicationLog");
>>>
>>>             Id(x => x.LogEntryID);
>>>
>>>              Map(x => x.Date);
>>>             Map(x => x.Level).WithLengthOf(50);
>>>             Map(x => x.Logger).WithLengthOf(255);
>>>             Map(x =>
>>> x.Message).CustomTypeIs("StringClob").CustomSqlTypeIs("text");
>>>             Map(x => x.Thread).WithLengthOf(50);
>>>         }
>>>     }
>>>
>>> Alec Whittington
>>>
>>>
>>> On Tue, Dec 9, 2008 at 7:57 AM, Alec Whittington <
>>> [EMAIL PROTECTED]> wrote:
>>>
>>>> Paul,
>>>>   thank you, I will get implemented when I get home this evening. Thanks
>>>> for your reply.
>>>>
>>>> Alec Whittington
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Tue, Dec 9, 2008 at 12:27 AM, Paul Batum <[EMAIL PROTECTED]>wrote:
>>>>
>>>>> Alec,
>>>>>
>>>>> Its probably worth trying to find out what the generated hbm xml looks
>>>>> like. The PersistenceModel class has a WriteMappingsTo method that you
>>>>> should be able to use. Alternatively you could use the debugger and step
>>>>> your way into the guts and check the xml document when it is created.
>>>>>
>>>>> Post the xml once you have it.. if the type comes up  as "text" in the
>>>>> hbm xml then we know the problem is the schema generation. If the type
>>>>> "text" does not appear then we know its a fluent nhibernate bug.
>>>>>
>>>>> Paul Batum
>>>>>
>>>>>
>>>>> On Tue, Dec 9, 2008 at 5:30 PM, Alec Whittington <
>>>>> [EMAIL PROTECTED]> wrote:
>>>>>
>>>>>> No Ideas? This has me stumped so far.
>>>>>>
>>>>>> Alec Whittington
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Dec 8, 2008 at 11:39 AM, Alec Whittington <
>>>>>> [EMAIL PROTECTED]> wrote:
>>>>>>
>>>>>>> Hi all,   I realize this might not be the best place to ask, but
>>>>>>> thought I would start here first then move up the stack as needed.
>>>>>>>
>>>>>>> I have a class, ApplicationLog, that I use for logging Log4Net
>>>>>>> messages. One of the properties for the class is "Message". Nothing 
>>>>>>> special,
>>>>>>> just a string.
>>>>>>> I would like to represent this as a text field in the database. My
>>>>>>> mapping for the field is as such:
>>>>>>>
>>>>>>> Map(x =>
>>>>>>> x.Message).CustomTypeIs("StringClob").CustomSqlTypeIs("text");
>>>>>>>
>>>>>>> In the mapping file (shown in the applications text log) I noticed
>>>>>>> that it was correct with the exception that is has a length on it.
>>>>>>>
>>>>>>> When I generate the SQL script, it does not generate that field in
>>>>>>> the table correctly. It generates it as a nvarchar(100) instead of 
>>>>>>> ntext. I
>>>>>>> am sure I am not the only one that has encountered this issue within the
>>>>>>> group. I am generating the SQL script against a SQL 2005 Dev Ed 
>>>>>>> database,
>>>>>>> not SQLExpress. Here is the code for generating the SQL file:
>>>>>>>
>>>>>>>         [Test]
>>>>>>>         public void CreateSchema()
>>>>>>>         {
>>>>>>>             Configuration cfg = new Configuration().Configure();
>>>>>>>             var persistenceModel = new PersistenceModel();
>>>>>>>             persistenceModel.addMappingsFromAssembly(
>>>>>>>                 Assembly.Load("Tubbed.Data"));
>>>>>>>             persistenceModel.Configure(cfg);
>>>>>>>             new 
>>>>>>> SchemaExport(cfg).SetOutputFile(@"c:\tubbed.sql").Create(true, false);
>>>>>>>             //new SchemaUpdate(cfg).Execute(true, false);
>>>>>>>         }
>>>>>>>
>>>>>>> Here is my mapping file:
>>>>>>>
>>>>>>>         public ApplicationLogMap()
>>>>>>>         {
>>>>>>>             WithTable("ApplicationLog");
>>>>>>>
>>>>>>>             Id(x => x.LogEntryID);
>>>>>>>
>>>>>>>             Map(x => x.Date);
>>>>>>>             Map(x => x.Level).WithLengthOf(50);
>>>>>>>             Map(x => x.Logger).WithLengthOf(255);
>>>>>>>             Map(x => 
>>>>>>> x.Message)CustomTypeIs("StringClob").CustomSqlTypeIs("text");
>>>>>>>             Map(x => x.Thread).WithLengthOf(50);
>>>>>>>         }
>>>>>>>
>>>>>>> As stated above, when I look at the mapping file in the log, it appears 
>>>>>>> correct, with exception of the length field. All fields look good in 
>>>>>>> the SQL script except for Message which comes out as:
>>>>>>>
>>>>>>> Message NVARCHAR(100) NULL
>>>>>>>
>>>>>>>  Any help is appreciated.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Alec Whittington
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to