回答

收藏

流利的NHibernate映射到SQL Server CHAR(10)ID列

技术问答 技术问答 201 人阅读 | 0 人回复 | 2023-09-12

对于NHibernate和Fluent
- H' N! b: E  {! s. yNHibernate都是新手,我在努力解决,因为会CHAR(10)列转换为导致的某些继承代码中的性能问题NVARCHAR。3 p* `5 n' n9 N" r2 g, o
从SQL事件探测器:2 g# R( Y2 C; x9 J5 m' f
exec sp_executesql N'select mytestclas0_.LinkId as LinkId45_,   mytestclas0_.Href as Href45_,   mytestclas0_.LinkActive as LinkActive45_ from MessageLinks mytestclas0_ where mytestclas0_.LinkId=@p0',N'@p0 nvarchar(4000)',@p0=N'BzE2T48HMF'你可以看到来自NHibernate的ID被迫转换为NVARCHAR。
) o, ?4 S8 Y" \% d" [6 w表定义:- q, h/ K: Y/ {7 p: M) U* k
CREATE TABLE [dbo].[MyTable](    [ID] [int] NULL,   [Href] [nvarchar](1000) NULL,   [LinkActive] [bit] NOT NULL,   [LinkId] [char](10) NOT NULL )类文件:
% d1 o4 I' \0 N. j5 V1 }/ epublic class MyTestClass {    public MyTestClass() {}    public virtual string LinkId{ get; set;    public virtual string Href{ get; set;    public virtual bool LinkActive { get; set; }}映射文件:2 E* R1 \$ k" d' @; o: B
        public class MyTestClassMapping : ClassMap    public MyTestClassMapping()      Table("MyTable");      Id(x => x.LinkId).Length(10);       Map(x => x.LinkId);      Map(x => x.Href);      Map(x => x.LinkActive);    我用LinkId与映射文件的数据类型有许多不同的尝试,包括以下映射:
$ X0 `8 R( Q5 G1 N& r* S: c' p, H                Id(x => x.LinkId).CustomSqlType("char(10)");    Id(x => x.LinkId).Length(10).CustomSqlType("char");    Id(x => x.LinkId).CustomSqlType("char");我正在寻找一个指向示例或文档的指针,它解释了如何使用它NHibernate传递的ID转换为CHAR(10)。
% k6 d2 b9 p, K! q9 U' F感谢您的帮助。3 R0 ^2 J8 v. W7 _& X' l- I) v
                                                               
( |, K& ~  R! M( A2 x. C  z; K    解决方案:                                                                ' S8 B$ o5 }/ `, m4 O0 l
                                                                映射应如下所示.2.2.基本值类型):
/ ^3 }9 K, M# v# H8 ^/ PId(x => x.LinkId)        .CustomType("AnsiString")  ...  ;char(非Unicode字符串)的NHibernate类型用于type="AnsiString"xml映射。以上是如何流利地做到这一点的。3 \! t! ^6 O4 d9 N8 m5 }
这里查看类似的故事:NHibernate性能(Ansi字符串与Unicode字符串)
2 q$ I% ~  G$ x0 F* Y0 {" A旁注:我从未试图指定长度…总是由NHibernate varchar(8000)使用MS SQL 2008方言生成的…
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则