Ted*_*Ted 12 fluent-nhibernate schemaexport
我有以下映射:
public class LogEntryMap
{
public LogEntryMap()
{
Map.Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Context).CustomSqlType("varchar").Length(512);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,使用SchemaExport在SQL Server 2008中生成数据库时,生成的脚本会忽略长度,因此实际上它最终为varchar长度为1:
create table OV_SAC.dbo.[LogEntry] (
Id BIGINT IDENTITY NOT NULL,
Context varchar null,
primary key (Id)
)
Run Code Online (Sandbox Code Playgroud)
.CustomSqlType("varchar 512")抛出一个例外.并且没有定义CustomSqlType,字符串被映射到nvarchar(它确实尊重Length属性).
有什么建议?
Jon*_*att 17
如果您希望将所有字符串映射到varchar而不是nvarchar,则可以考虑使用约定:
/// <summary>
/// Ensures that all of our strings are stored as varchar instead of nvarchar.
/// </summary>
public class OurStringPropertyConvention : IPropertyConvention
{
public void Apply(IPropertyInstance instance)
{
if (instance.Property.PropertyType == typeof (string))
instance.CustomType("AnsiString");
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您的映射可以返回到简单的映射:
Map(x => x.Context);
Run Code Online (Sandbox Code Playgroud)
只要确保你记得告诉Fluent NH使用这个约定:
var configuration = new Configuration();
configuration.Configure();
Fluently
.Configure(configuration)
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<Widget>()
.Conventions.Add<OurStringPropertyConvention>()
)
.BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
卫生署.
Map(x => x.Context).CustomSqlType("varchar (512)");
create table OV_SAC.dbo.[LogEntry] (
Id BIGINT IDENTITY NOT NULL,
Context varchar (512) null,
primary key (Id)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8482 次 |
| 最近记录: |