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