1

我正在映射以下实体:

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(),但这抱怨没有为它定义构造函数。

有什么想法吗?

4

3 回答 3

4

我必须将 AnsiStringType 显式转换为 IIdentifierType 并设置长度属性。

       Id(x => x.Id,
       m =>
       {
           m.Generator(Generators.Assigned);
           m.Type((IIdentifierType)TypeFactory.GetAnsiStringType(16));
           m.Length(16);
       });
于 2012-11-06T17:13:47.433 回答
1

采用NHibernate.Type.TypeFactory.GetAnsiStringType(someLength)

于 2012-11-01T19:55:37.283 回答
0

NHibernate.Type.TypeFactory.GetAnsiStringType(someLength) 在 SetParameterList() 的情况下不起作用,所以我将其更改为 NHibernateUtil.AnsiString。这将参数更改为 varchar(8000) 仍然可以,而不是 nvarchar(4000) 导致执行计划选择发生变化的问题。

于 2018-08-14T06:10:59.063 回答