【发布时间】:2011-01-08 18:43:51
【问题描述】:
我在这里运行这个示例:https://github.com/jagregory/fluent-nhibernate/blob/master/src/Examples.FirstProject/Program.cs
String 类型的所有 C# 属性都映射到 TEXT sql 字段而不是
nvarchar 或 varchar,除了它是默认设置。
我该如何改变呢?
我知道我可以做到:
Map(x => x.Name).CustomSqlType("nvarchar").Length(50); // does not work !!!
Map(x => x.Name).CustomSqlType("nvarchar (50)"); // does work !!!
但我不想更改每个字段...
更新:...因此我可以通过 =>
进行自定义约定我要做的是编写一个自定义的 Convention 类,例如:
public class ColumnStringToNVarCharConvention : IPropertyConvention, IPropertyConventionAcceptance
{
public void Apply(IPropertyInstance instance)
{
instance.CustomSqlType("nvarchar");
}
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Property.GetType().Equals(typeof(string)));
}
}
有人可以正确上述代码吗?我测试了它,但它无论如何都不起作用......
【问题讨论】:
-
如果它没有默认为
Text或NVARCHAR(MAX),会不会更令人困惑?毕竟,选择作为默认值的任何长度都是任意的,然后您的问题可能是“为什么 NH 选择长度 x 作为 NVARCHAR 字段的默认值?” -
主要部分 > 90% 的数据库字符串字段是 varchar 或 nvarchar 而不是无法索引的 TEXT。那么为什么不提供 varchar/nvarchar 作为 DEFAULT 呢?
-
我必须手动将我的字段设置从 TEXT 编辑为 Varchar,因为平均 10% 的字段被用作 TEXT ?没有意义。为什么不将 90% 设为默认值?逻辑嗯?
-
Funny... 这个人在 6 个月前遇到了 OPOSITE 问题:stackoverflow.com/questions/3105391/… 他得到了 DEFAULT NVARCHAR 并想要文本大声笑???
-
您在配置中使用与数据库相同的方言吗?
标签: string sqlite text fluent-nhibernate convention