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
-~----------~----~----~----~------~----~------~--~---