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

时间:2018-02-05 12:28:08

标签: nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我试图在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如何使用正确类型的参数生成查询?

由于

1 个答案:

答案 0 :(得分:0)

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

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

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