How do I set a field to map to

NVARCHAR(MAX)

or

SMALLDATETIME


Updated at 02.04.2010 10:02:29

It seems the best solution is to use DomainUpgradeMode.PerformSafely and then modifying the column type in SQL script.

I suggest to add the column type customization feature in future version, something like

[Field(ColumnType="SMALLDATETIME")]

How to submit feature request to DO team?

This thread was imported from our support forum. The original discussion may contain more detailed answer. Original topic by ccchai.

asked Apr 02 '10 at 04:32

Editor's gravatar image

Editor
46147156157

edited May 31 '11 at 08:04

Dmitri%20Maximov's gravatar image

Dmitri Maximov
22111211


One Answer:

Hello, ccchai.

The answer depends on using of a legacy support feature of DataObjects.Net I'll describe both cases.

You use a regular (DO managed) database.

By default string fields have NVARCHAR(N) type, where N is determined by a fancy algorithm.

If you do not specify value for Field.Length property maximal supported length is used:

[Field] // This property is mapped to NVARCHAR(4000)
public string Text { get; set; }

If you specify any value that is less than maximal supported length that value is used:

[Field(Length = 100)] // This property is mapped to NVARCHAR(100)
public string Text { get; set; }

If you specify any value that is greater than maximal supported length than MAX is used:

[Field(Length = 7777)] // This property is mapped to NVARCHAR(MAX)
public string Text { get; set; }

To ensure portability across various RDBMS-es that may have different maximal length of character columns we recommend the following approach:

[Field(Length = int.MaxValue)] // This property is mapped to NVARCHAR(MAX)
public string Text { get; set; }

There is no way to set column type for DateTime field when using non-legacy mode. For SQL Server 2005 DATETIME SQL type is used. For SQL Server 2008 DATETIME2 SQL type is used.

You use a legacy database mode.

In this case DataObjects.Net will try to fit your needs and your database. It does not change your database but only validate it to be compatible with your model. All rules of choosing string types still apply. However, column type can be CHAR(N), VARCHAR(N), NCHAR(N) or NVARCHAR(N) type for limited length string fields. DataObjects.Net will find out what type is used in database and will use that type, but you still need to specify a valid Field.Length value. If you want unlimited length column, its type can be TEXT, NTEXT, VARCHAR(MAX) or NVARCHAR(MAX). For DateTime fields it will accept any of the datetime types: DATE, DATETIME, DATETIME2, SMALLDATETIME.

answered Apr 02 '10 at 09:42

Denis%20Krjuchkov's gravatar image

Denis Krjuchkov
179325

edited May 31 '11 at 08:03

Dmitri%20Maximov's gravatar image

Dmitri Maximov
22111211

It is already submitted ;)

I'll create the issue for this and drop a link to it here.

(Apr 02 '10 at 09:42) Alex Yakunin Alex%20Yakunin's gravatar image
Your answer
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
toggle preview

powered by OSQA