我试图在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如何使用正确类型的参数生成查询?
由于
答案 0 :(得分:0)
@David Osbourne是正确的,这确实回答了我的基本问题:Always encrypted mapping in NHibernate但我会在这里总结一下。
NHibernate将始终使用参数的最大字段大小来允许通配符,因此强制字段长度有点冒险。如果您确实需要,可以在链接的答案中查看驱动程序中的答案。
我的问题实际上是由NH在VARCHAR字段上使用NVARCHAR引起的。通过将列更改为正在和AnsiString,我将时间从40秒减少到亚秒。