具有特定类型的字符串外键的 NHibernate 映射

NHibernate Mapping for string Foreign Key with specific type

我正在尝试在 NHibernate 中映射一个字符串外键。这有效,但该字段是 varchar(10)。这会导致性能问题并且脚本超时,因为 NH 使用的是 nvarchar(4000)。当我们将 SSMS 中的变量类型更改为 varchar(10) 时,查询不到一秒钟。

我在 NHibernate 中有以下设置:

public class Product
{
  ProductCode:string;
}
public class ProductMap : ClassMap<Product>
{
  public ProductMap()
  {
    Id(p=>p.ProductCode);
  }
}

public class Holding
{
  public long HoldingID {get;set;
  public Product Prod {get;set;}
  public decimal SomeValue {get;set;}
}
public class HoldingMap
{
  public HoldingMap()
  {
    Id(h=>h.HoldingID);
    References(h=>h.Product, "ProductCode");
    Map(h=>h.SomeValue);
  }
}

我试过更改 Id(p=>p.ProductCode); 以便更好地输入:

Id(c => c.Code, "portfolio_code").CustomSqlType("varchar(10)");

但这似乎并没有改变任何东西。有谁知道如何让 NH 使用正确键入的参数生成查询?

谢谢

@David Osbourne 是正确的,这确实回答了我的基本问题: 但我会在这里总结一下。

NHibernate 将始终使用参数的最大字段大小以允许通配符,因此强制字段长度有点冒险。如果确实需要,您可以在链接的答案中查看驱动程序中的答案。

我的问题实际上是由 NH 在 VARCHAR 字段上使用 NVARCHAR 引起的。通过将列更改为 being 和 AnsiString,我将花费的时间从 40 秒减少到亚秒。