我正在映射以下实体:
public class PersonEntity
{
public virtual string PersonId { get; set; }
public virtual String Salutation { get; set; }
public virtual String FirstName { get; set; }
public virtual String LastName { get; set; }
public virtual DateTime Birthdate { get; set; }
}
public class PersonMap : ClassMapping<PersonEntity>
{
public PersonMap()
{
//ComponentAsId(i => i.Key, map => map.Property(p => p.PersonId, m => m.Type(NHibernateUtil.AnsiString)));
Id(i => i.PersonId, map => map.Type(???)));
Property(i => i.Salutation);
Property(i => i.FirstName);
Property(i => i.LastName);
Property(i => i.Birthdate);
}
}
正如您在注释掉的代码中所看到的,当使用组件作为Id时,我可以使用NHibernateUtil将类型设置为AnsiString。但是我无法弄清楚在普通Id映射中要做什么。
我尝试过使用new NHibernate.Type.AnsiStringType()
,但是抱怨没有为它定义构造函数。
任何想法的家伙?
答案 0 :(得分:4)
我必须显式地将AnsiStringType转换为IIdentifierType并设置length属性。
Id(x => x.Id,
m =>
{
m.Generator(Generators.Assigned);
m.Type((IIdentifierType)TypeFactory.GetAnsiStringType(16));
m.Length(16);
});
答案 1 :(得分:1)
使用NHibernate.Type.TypeFactory.GetAnsiStringType(someLength)
答案 2 :(得分:0)
在SetParameterList()的情况下,NHibernate.Type.TypeFactory.GetAnsiStringType(someLength)不起作用,因此我将其更改为NHibernateUtil.AnsiString。这将参数更改为varchar(8000)仍然可用,而不是nvarchar(4000),nvarchar(4000)导致执行计划选择的更改出现问题。