2024年10月mapping映射(映射英文)

 更新时间:2024-10-12

  ⑴mapping映射(映射英文

  ⑵映射的英文:mapped;mapping。

  ⑶Superbitmapping超位映射Remapkeysandbuttonsonyourkeyboard,joystick,andmouse.重新映射你的键盘、游戏操纵杆和鼠标上的按键和按钮。LoadMapping载入映射Texturemapping纹理映射ObjectMapping物体映射Fontmapfile字体映射文件simplicialmapping单形映射

  ⑷NomappingbetweenaountnamesandsecurityIDswasdone.帐户名与安全标识间无任何映射完成。

  ⑸You’lldothisfromthemappingmodel.你可以从映射模型完成这个步骤。

  ⑹SomemappingbetweenaountnamesandsecurityIDswasnotdone.帐户名和安全ID间的某些映射未完成。

  ⑺mapped是什么意思:vbl.映射,绘制…之地图,计划

  ⑻Thisisastandardmap.这是一份有权威性的地图。OutlineamapofNorthAmerica.画一幅北美的略图。astreetmap/planofYork约克城的街道地图Onmaps,acrossisthesymbolforachurch.在地图上,十字符号代表教堂。Thescientistsmappedthesurfaceofthemoon.科学家绘制了月球表面的地图。

  ⑼修改mapping文件需要重启吗

  ⑽需要。修改mapping文件后,都需要重启服务才能生效。映射(mapping)Mapping是定义文档及其包含的字段是如何存储和索引的过程。

  ⑾mapping什么意思

  ⑿mapping的意思是地图,绘制地图是map的ing形式,句中作为名词和动词使用。

  ⒀vt.映射;计划;绘制地图;确定基因在染色体中的位置

  ⒁n.地图;示意图;染色体图

  ⒂n.(Map)人名;(法)马普

  ⒃WorldMap?世界地图;全世界电子地图;地界地图;世界舆图

  ⒄geologicmap?地质图;地质学;地质年代

  ⒅heatmap?热图;网站点击热图;热度图;热区图

  ⒆Logisticmap?单峰映象;Logistic映射;??逻辑斯谛映射;逻辑斯蒂映射

  ⒇mappuffer?条纹叉鼻鲀

  ⒈Heunfoldedthemapandsetitonthefloor.

  ⒉他展开地图,把它放在了地板上。

  ⒊He?was?talking?while?pointing?atthe?map.

  ⒋他一边用手指着地图一边讲话。

  ⒌map的近义词有schedule?,?propose?,?design?,?project,conventionaldiagram?,?schematicplan。

  ⒍vt.安排,计划;编制目录;将……列入计划表

  ⒎n.时间表;计划表;一览表

  ⒏Hehasbeenforcedtoadjusthisschedule.

  ⒐他已被迫调整了日程安排。

  ⒑Thespaceshuttlehadbeenscheduledtoblastoffat:.

  ⒒这架航天飞机计划于:发射升空。

  ⒓vt.建议;打算,计划;求婚

  ⒔vi.建议;求婚;打算

  ⒕Hamiltonproposedachangeinthetraditionaldebatingformat.

  ⒖汉密尔顿建议对传统的辩论形式作一个改变。

  ⒗HehasproposedaresolutionlimitingtheroleofU.S.troops.

  ⒘他提出了一项限制美军作用的决议。

  ⒙ssplink手机映射系统是什么意思

  ⒚汽车手机映射功能指的是车载系统通过手机连接,将手机上一些功能映射到车载系统上。具体解释如下。这样就能解锁汽车上导航,听歌等娱乐休闲功能,像有的车没有自带导航,就可以打开手机导航直接放到中控屏幕上。映射(mapping)是一种虚拟化技术,它可以把虚拟磁盘或者网络磁盘直接转变为真实磁盘/网络磁盘,放入“我的电脑”里。其实,就是把一个”看不见摸不着“的虚拟磁盘/网络磁盘,直接把它变成“看得见摸得着”的磁盘。

  ⒛环境映射(EnvironmentMapping)的简介

  环境映射是一种用来模拟光滑表面对周围环境的反射的技术,常见的如镜子、光亮漆面的金属等等。这种技术的实现主要通过将一张带有周围环境的贴图附在所需要表现的多边形表面来实现的。目前在实时D游戏画面渲染中经常使用的有两种环境映射。球形环境映射是模拟在球体表面产生环境映射的技术,通过对普通贴图的UV坐标进行调整计算来产生在球体表面应产生的扭曲。UV的计算利用球体表面的法线来计算。计算公式中的Nx和Ny是表面法线的x和y分量,除以将区间限制在区间。在这个公式的计算下,当球体正中表面法线正对摄像机的地方,坐标不会有任何扭曲;周围点依次随着Nx和Ny分量的增大而产生扭曲。球体背面的剔除面可以根据法线Z分量的正负来判断。

  C语言能实现mapping这样的映射关系吗

  肯定可以的.只要你定义好了映射规则,用数组或者用链表,都可以实现映射的.在C语言中无非就是一个指针指向就搞定了.

  如何使用FluentNhibernate中的Automapping进行ORMapping映射

  由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。最早的项目中,我们使用了最传统的XML配置文件的方式编写映射关系,但是这样太麻烦,每次修改class和表时都要去修改对应的XML文件,而且还容易出错,一定有疏忽遗漏的地方,还不容易找出错误,所以在第二个项目中,我们使用了FluentNHibernate的Mapping方式代替XML配置。使用FluentNHibernate的最大好处是降低了出错的机会,因为FluentNhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。publicsealedclassConfigMapping:ClassMap《Config》{publionfigMapping(){Table(“CONFIG“);Id(x=》x.Id,“CONFIG_ID“).GeneratedBy.HiLo(““);Map(x=》x.ConfigKey,“CONFIG_KEY“);Map(x=》x.ConfigValue,“CONFIG_VALUE“);}}但是使用FluentNHibernate的配置方式仍然是需要编写Mapping代码的,也就意味着,如果我更改class或者DataTable的时候,还要对应的更改该Mapping文件。更多的修改意味着更多的风险,为了减少这方面的风险,同时为了减少配置的工作量,所以在最新的项目中采用了FluentNHibernate中的Automapping。我们只需要定义好映射的规则,就可以不对每个表和类分别编写映射配置,而是按照规则进行自动的Mapping工作。这样在修改class或者DataTable时,只需要修改类和表即可,不需要再修改配置文件。要做到Automapping,就一定要定义好严格的命名规范,然后按照规范编写Automapping规则,实现自动化的映射。比如我们可以定义如下的规则:类名和字段名采用每个单词首字母大写的方式而数据库表名和列名使用全部大写,单词之间下划线分割的方式。(比如CostCenter类对应表COST_CENTER类中的主键使用Id命名,表中的主键使用表名+“_ID”的命名方式。(比如CostCenter中有publicvirtuallongId{get;set;},对应表中的列COST_CENTER_ID对于一对多的关系,使用父方的类名作为属性名,表中使用父表的主键列名作为对应的外键列的列名。(比如一个班对应多个学生,在Class类中就有publicvirtualIList《Student》Students{get;set;},而在Student类中就必须使用Class作为属性名:publicvirtualClassClass{get;set;}对于SubClass,采用将多个子对象都存在同一个表中的方式实现,使用“TYPE”列作为DiscriminatorColumn,使用之类的类名作为子类的唯一标识。对于多对多的关系,把两个类对应的表名进行排序,将小的排前面,然后将两个表名连接起来,中间使用“_”分割。(比如Course和Student是多对多关系,那么产生的中间表表名为COURSE_STUDENT对于枚举,在数据库中使用tinyint也就是一个Byte来存储,枚举在Automapping中作为UserType进行处理。下面就来编写Automapping的转换规则,首先对String写一个扩展方法,实现CostCenter到COST_CENTER的转换:staticstringToDatabaseName(thisstrings){returnRegex.Replace(s,“B“,match=》“_“+match.ToString()).ToUpper();}对于,需要实现IClassConvention实现如下:publilassClassNameConvention:IClassConvention{publicvirtualvoidApply(IClassInstanceinstance){vartableName=instance.EntityType.Name.ToDatabaseName();instance.Table(tableName);}}同时对于列,需要使用IPropertyConvention接口,实现如下:publilassPropertyConvention:IPropertyConvention{publicvoidApply(IPropertyInstanceinstance){instance.Column(instance.Name.ToDatabaseName());}}对于,需要实现IIdConvention接口,另外我们采用的是Hilo值的主键生成方式,使用一个表HIBERNATE_UNIQUE_KEY存储每个表的流水。具体实现如下:publilassPrimaryKeyConvention:IIdConvention{publionststringNextHiValueColumnName=“VALUE“;publionststringNHibernateHiLoIdentityTableName=“HIBERNATE_UNIQUE_KEY“;publionststringTableColumnName=“TABLE_NAME“;publicvirtualvoidApply(IIdentityInstanceinstance){vartableName=instance.EntityType.Name.ToDatabaseName();instance.Column(tableName+“_ID“);//这里设置主键的命名为表名+“_ID”if(instance.Type==typeof(long))//接下来设置主键的生成方式为HiLo值方式{instance.GeneratedBy.HiLo(NHibernateHiLoIdentityTableName,NextHiValueColumnName,““,builder=》builder.AddParam(“where“,string.Format(“{}=’{}’“,TableColumnName,tableName)));}}}对于,一对多的情况,需要设置“一”的一方的Collection和“多”的一方的Reference,具体如下:publilassCollectionConvention:ICollectionConvention{publicvoidApply(ICollectionInstanceinstance){stringcolName;varentityType=instance.EntityType;varchildType=instance.ChildType;if(entityType==childType)//这里是专门对自身关联一对多的情况进行特殊处理,统一使用PARENT_ID作为外键列colName=“PARENT_ID“;else{colName=entityType.Name.ToDatabaseName()+“_ID“;}instance.Key.Column(colName);instance.Cascade.AllDeleteOrphan();}}publilassReferenceConvention:IReferenceConvention{publicvoidApply(IManyToOneInstanceinstance){stringcolName=null;varreferenceType=instance.Class.GetUnderlyingSystemType();varentityType=instance.EntityType;varpropertyName=instance.Property.Name;//Selfassociationif(referenceType==entityType)colName=“PARENT_ID“;elsecolName=propertyName.ToDatabaseName()+“_ID“;instance.Column(colName);}}对于SubClass的处理,需要涉及到指定要进行Discriminate的类,还有DiscriminateColumn,然后指定DiscriminateColumn中如何对Subclass进行Mapping。这里就需要重写DefaultAutomappingConfiguration类,在该类中指定主键、Discriminate的类等,具体代码如下:publilassAutoMapConfiguration:DefaultAutomappingConfiguration{publicoverrideboolShouldMap(Typetype){return(type.IsClass&&type.Namespace.StartsWith(“OurProject.Core.Model“));//指定了哪些类是要进行AutoMapping的}publicoverrideboolIsId(Membermember){returnmember.Name==“Id“;//指定了每个类中的Id属性就是该类的主键}publicoverrideboolIsDiscriminated(Typetype)//指定了哪些类是需要进行SubClass继承,将其SubClass都存放在一个表中的。{returntype.In(typeof(Client),typeof(Classification),typeof(MultiClassification));}publicoverridestringGetDiscriminatorColumn(Typetype){return“TYPE“;//指定了SubClass的区分列就是有一个叫做TYPE的列}}然后就是关于DiscriminateColumn中的值如何映射成对应的Subclass,需要实现ISubclassConvention接口,代码如下:publilassSubclassConvention:ISubclassConvention{publicvoidApply(ISubclassInstanceinstance){instance.DiscriminatorValue(instance.EntityType.Name);}}对于多对多,就需要实现IHasManyToManyConvention接口,在这个接口中对两个表名进行排序,然后进行连接表示中间表。具体代码如下:publilassHasManyToManyConvention:IHasManyToManyConvention{publicvoidApply(IManyToManyCollectionInstanceinstance){varentityDatabaseName=instance.EntityType.Name.ToDatabaseName();varchildDatabaseName=instance.ChildType.Name.ToDatabaseName();varname=GetTableName(entityDatabaseName,childDatabaseName);//对两个表名进行排序,然后连接组成中间表名instance.Table(name);instance.Key.Column(entityDatabaseName+“_ID“);instance.Relationship.Column(childDatabaseName+“_ID“);}privatestringGetTableName(stringa,stringb){varr=System.String.pareOrdinal(a,b);if(r》){return“{}_{}“.Fill(b,a);}else{return“{}_{}“.Fill(a,b);}}}对于枚举的处理,需要指定枚举为UserType,实现接口IUserTypeConvention,具体代码如下:publilassEnumConvention:IUserTypeConvention{publicvoidAept(IAeptanceCriteria《IPropertyInspector》criteria){criteria.Expect(x=》x.Property.PropertyType.IsEnum);}publicvoidApply(IPropertyInstanceinstance){instance.CustomType(instance.Property.PropertyType);}}实现了以上这几个接口,那么大部分情况下的Automapping都可以实现了。最后是将这些接口通知给FluentNhibernate,让其应用这些接口,导入指定Assembly中的DomainModel,具体的实现方法是:publicvirtualAutoPersistenceModelGenerate(stringdalAssemblies){varmappings=AutoMap.Assemblies(newAutoMapConfiguration(),domainAssemblies.Select(Assembly.LoadFrom).ToArray());foreach(varignoredBaseTypeinIgnoredBaseTypes){mappings.IgnoreBase(ignoredBaseType);}foreach(varincludeBaseTypeinIncludeBaseTypes){mappings.IncludeBase(includeBaseType);}mappings.Conventions.Setup(GetConventions());//指定了Automapping转换的接口实现foreach(vardalAssemblyindalAssemblies){mappings.UseOverridesFromAssembly(Assembly.LoadFrom(dalAssembly));}returnmappings;}publicstaticIList《Type》IgnoredBaseTypes=newList《Type》//这里列出的类都是些Base类,不会Mapping到具体某个表{typeof(Entity)//该对象其实就只有Id这个属性,作为所有要Mapping的类的父类};publicstaticIList《Type》IncludeBaseTypes=newList《Type》//默认情况下抽象类是不会Mapping成表的,所以这里需要指明这些类是要Mapping成表的{typeof(Classification),typeof(MultiClassification),typeof(Client)};protectedAction《IConventionFinder》GetConventions(){returnfinder=》{finder.Add《ClassNameConvention》();finder.Add《PrimaryKeyConvention》();finder.Add《CollectionConvention》();finder.Add《ReferenceConvention》();finder.Add《HasManyConvention》();finder.Add《SubClassNameConvention》();finder.Add《SubclassConvention》();finder.Add《PropertyConvention》();finder.Add《EnumConvention》();finder.Add《HasManyToManyConvention》();};}该方法返回了一个AutoPersistenceModel,使用这个对象注册到NHibernate中即可。

  环境映射(EnvironmentMapping)的立方映射

  立方环境映射(CubicEnvironmentMapping立方环境映射是现在常用环境映射技术。我们知道游戏场景中经常通过在一个正方体上的六个面贴上前后左右上下六个贴图来模拟天空、宇宙等环境,称为Cubemap有的引擎中成为Skybox,立方环境映射的原理就是在游戏中所需要产生映射的物体的位置动态生成一套Cubemap,再对Cubemap进行采样生成物体表面应该反射出的周遭环境。具体的采样方法是利用物体表面的法线来计算的,我们假设动态生成的Cubemap的正方体刚刚好包围住需要产生环境映射效果的物体,我们从摄像机也就是观察点出发同物体表面产生出的反射向量(同Phong光照模型的镜面反射中的反射向量是相同的,计算方法也相同R=(E*N)*N-E,这个反射向量同正方体相交于一点,得到了这个点的所在面及UV坐标,采样,得到的颜色值就是我们应当看到。立方环境映射的原理就是这样的,但是这些计算步骤并不需要我们在使用的时候过多考虑,因为从Cubemap的生成,到采样的计算,图形API已经都为我们封装好了,下面记录了在DirectX中简单的API调用流程,权作笔记。首先需要声明Cubemap的贴图LPDIRECTDCUBETEXTUREm_pCubeMap=NULL;然后创建Cubemap贴图pddDevice-》CreateCubeTexture(,,DDUSAGE_RENDERTARGET,DDFMT_ARGB,DDPOOL_DEFAULT,&m_pCubeMap,NULL);注意这里用到了DDUSAGE_RENDERTARGET,也就是说我们的Cubemap需要靠RenderTarget绘制。如果需要的话,深度缓冲也可以考虑在内。IDirectDSurface*g_pDepthCube=NULL;DXUTDeviceSettingsddSettings=DXUTGetDeviceSettings();pddDevice-》CreateDepthStencilSurface(,,ddSettings.pp.AutoDepthStencilFormat,DDMULTISAMPLE_NONE,,TRUE,&g_pDepthCube,NULL);绘制函数voidRenderSceneIntoCubeMap(IDirectDDevice*pddDevice,doublefTime){HRESULThr;//Cubemap使用的投影矩阵DDXMATRIXAmProj;DDXMatrixPerspectiveFovLH(&mProj,DDX_PI*.f,.f,.f,.f);LPDIRECTDSURFACEpRTOld=NULL;V(pddDevice-》GetRenderTarget(,&pRTOld));LPDIRECTDSURFACEpDSOld=NULL;//if(SUEEDED(pddDevice-》GetDepthStencilSurface(&pDSOld)))//{////如果使用深度缓冲//V(pddDevice-》SetDepthStencilSurface(g_pDepthCube));//}for(intnFace=;nFace《;++nFace)//依次完成Cubemap中的六个面的绘制{LPDIRECTDSURFACEpSurf;V(m_pCubeMap-》GetCubeMapSurface((DDCUBEMAP_FACES)nFace,,&pSurf));V(pddDevice-》SetRenderTarget(,pSurf));SAFE_RELEASE(pSurf);DDXMATRIXAmView=DXUTGetCubeMapViewMatrix(nFace);V(pddDevice-》Clear(L,NULL,DDCLEAR_ZBUFFER,xff,.f,L));pddDevice-》SetTransform(DDTS_VIEW,&mView);pddDevice-》SetTransform(DDTS_PROJECTION,&mProj);if(SUEEDED(pddDevice-》BeginScene())){//在这里绘制环境pddDevice-》EndScene();}}//Restoredepth-stencilbufferandrendertarget/*if(pDSOld)//如果使用深度缓冲{V(pddDevice-》SetDepthStencilSurface(pDSOld));SAFE_RELEASE(pDSOld);}*/V(pddDevice-》SetRenderTarget(,pRTOld));SAFE_RELEASE(pRTOld);}这个绘制函数一般在每一帧绘制场景的最开始执行,先将场景内的物体绘制在Cubemap上。这样我们就有了可用的Cubemap,之后我们绘制需要采用环境映射的物体时,将这个Cubemap作为Texture传入Shader内,另外还需传入观察向量用于计算反射向量。在Shader中,顶点着色器中完成反射向量的计算:floatvecReflect=normalize(reflect(vecEye,InNormal));像素着色器负责采样,HLSL中已经有现成的函数可以使用,我们只需将计算所得反射向量传入即可。Output.RGBColor=texCUBE(EnvironmentSampler,In.CubeTexcoord);采样器EnvironmentSampler并不需要特别的设置。textureEnvironmentMap;samplerCUBEEnvironmentSampler=sampler_state{Texture=(EnvironmentMap);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};

  如何使用FluentNhibernate中的Automapping进行ORMapping映射

  由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。最早的项目中,我们使用了最传统的XML配置文件的方式编写映射关系,但是这样太麻烦,每次修改class和表时都要去修改对应的XML文件,而且还容易出错,一定有疏忽遗漏的地方,还不容易找出错误,所以在第二个项目中,我们使用了FluentNHibernate的Mapping方式代替XML配置。使用FluentNHibernate的最大好处是降低了出错的机会,因为FluentNhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。publicsealedclassConfigMapping:ClassMap《Config》{publionfigMapping(){Table(“CONFIG“);Id(x=》x.Id,“CONFIG_ID“).GeneratedBy.HiLo(““);Map(x=》x.ConfigKey,“CONFIG_KEY“);Map(x=》x.ConfigValue,“CONFIG_VALUE“);}}但是使用FluentNHibernate的配置方式仍然是需要编写Mapping代码的,也就意味着,如果我更改class或者DataTable的时候,还要对应的更改该Mapping文件。更多的修改意味着更多的风险,为了减少这方面的风险,同时为了减少配置的工作量,所以在最新的项目中采用了FluentNHibernate中的Automapping。我们只需要定义好映射的规则,就可以不对每个表和类分别编写映射配置,而是按照规则进行自动的Mapping工作。这样在修改class或者DataTable时,只需要修改类和表即可,不需要再修改配置文件。要做到Automapping,就一定要定义好严格的命名规范,然后按照规范编写Automapping规则,实现自动化的映射。比如我们可以定义如下的规则:类名和字段名采用每个单词首字母大写的方式而数据库表名和列名使用全部大写,单词之间下划线分割的方式。(比如CostCenter类对应表COST_CENTER类中的主键使用Id命名,表中的主键使用表名+“_ID”的命名方式。(比如CostCenter中有publicvirtuallongId{get;set;},对应表中的列COST_CENTER_ID对于一对多的关系,使用父方的类名作为属性名,表中使用父表的主键列名作为对应的外键列的列名。(比如一个班对应多个学生,在Class类中就有publicvirtualIList《Student》Students{get;set;},而在Student类中就必须使用Class作为属性名:publicvirtualClassClass{get;set;}对于SubClass,采用将多个子对象都存在同一个表中的方式实现,使用“TYPE”列作为DiscriminatorColumn,使用之类的类名作为子类的唯一标识。对于多对多的关系,把两个类对应的表名进行排序,将小的排前面,然后将两个表名连接起来,中间使用“_”分割。(比如Course和Student是多对多关系,那么产生的中间表表名为COURSE_STUDENT对于枚举,在数据库中使用tinyint也就是一个Byte来存储,枚举在Automapping中作为UserType进行处理。下面就来编写Automapping的转换规则,首先对String写一个扩展方法,实现CostCenter到COST_CENTER的转换:staticstringToDatabaseName(thisstrings){returnRegex.Replace(s,“B“,match=》“_“+match.ToString()).ToUpper();}对于,需要实现IClassConvention实现如下:publilassClassNameConvention:IClassConvention{publicvirtualvoidApply(IClassInstanceinstance){vartableName=instance.EntityType.Name.ToDatabaseName();instance.Table(tableName);}}同时对于列,需要使用IPropertyConvention接口,实现如下:publilassPropertyConvention:IPropertyConvention{publicvoidApply(IPropertyInstanceinstance){instance.Column(instance.Name.ToDatabaseName());}}对于,需要实现IIdConvention接口,另外我们采用的是Hilo值的主键生成方式,使用一个表HIBERNATE_UNIQUE_KEY存储每个表的流水。具体实现如下:publilassPrimaryKeyConvention:IIdConvention{publionststringNextHiValueColumnName=“VALUE“;publionststringNHibernateHiLoIdentityTableName=“HIBERNATE_UNIQUE_KEY“;publionststringTableColumnName=“TABLE_NAME“;publicvirtualvoidApply(IIdentityInstanceinstance){vartableName=instance.EntityType.Name.ToDatabaseName();instance.Column(tableName+“_ID“);//这里设置主键的命名为表名+“_ID”if(instance.Type==typeof(long))//接下来设置主键的生成方式为HiLo值方式{instance.GeneratedBy.HiLo(NHibernateHiLoIdentityTableName,NextHiValueColumnName,““,builder=》builder.AddParam(“where“,string.Format(“{}=’{}’“,TableColumnName,tableName)));}}}对于,一对多的情况,需要设置“一”的一方的Collection和“多”的一方的Reference,具体如下:publilassCollectionConvention:ICollectionConvention{publicvoidApply(ICollectionInstanceinstance){stringcolName;varentityType=instance.EntityType;varchildType=instance.ChildType;if(entityType==childType)//这里是专门对自身关联一对多的情况进行特殊处理,统一使用PARENT_ID作为外键列colName=“PARENT_ID“;else{colName=entityType.Name.ToDatabaseName()+“_ID“;}instance.Key.Column(colName);instance.Cascade.AllDeleteOrphan();}}publilassReferenceConvention:IReferenceConvention{publicvoidApply(IManyToOneInstanceinstance){stringcolName=null;varreferenceType=instance.Class.GetUnderlyingSystemType();varentityType=instance.EntityType;varpropertyName=instance.Property.Name;//Selfassociationif(referenceType==entityType)colName=“PARENT_ID“;elsecolName=propertyName.ToDatabaseName()+“_ID“;instance.Column(colName);}}对于SubClass的处理,需要涉及到指定要进行Discriminate的类,还有DiscriminateColumn,然后指定DiscriminateColumn中如何对Subclass进行Mapping。这里就需要重写DefaultAutomappingConfiguration类,在该类中指定主键、Discriminate的类等,具体代码如下:publilassAutoMapConfiguration:DefaultAutomappingConfiguration{publicoverrideboolShouldMap(Typetype){return(type.IsClass&&type.Namespace.StartsWith(“OurProject.Core.Model“));//指定了哪些类是要进行AutoMapping的}publicoverrideboolIsId(Membermember){returnmember.Name==“Id“;//指定了每个类中的Id属性就是该类的主键}publicoverrideboolIsDiscriminated(Typetype)//指定了哪些类是需要进行SubClass继承,将其SubClass都存放在一个表中的。{returntype.In(typeof(Client),typeof(Classification),typeof(MultiClassification));}publicoverridestringGetDiscriminatorColumn(Typetype){return“TYPE“;//指定了SubClass的区分列就是有一个叫做TYPE的列}}然后就是关于DiscriminateColumn中的值如何映射成对应的Subclass,需要实现ISubclassConvention接口,代码如下:publilassSubclassConvention:ISubclassConvention{publicvoidApply(ISubclassInstanceinstance){instance.DiscriminatorValue(instance.EntityType.Name);}}对于多对多,就需要实现IHasManyToManyConvention接口,在这个接口中对两个表名进行排序,然后进行连接表示中间表。具体代码如下:publilassHasManyToManyConvention:IHasManyToManyConvention{publicvoidApply(IManyToManyCollectionInstanceinstance){varentityDatabaseName=instance.EntityType.Name.ToDatabaseName();varchildDatabaseName=instance.ChildType.Name.ToDatabaseName();varname=GetTableName(entityDatabaseName,childDatabaseName);//对两个表名进行排序,然后连接组成中间表名instance.Table(name);instance.Key.Column(entityDatabaseName+“_ID“);instance.Relationship.Column(childDatabaseName+“_ID“);}privatestringGetTableName(stringa,stringb){varr=System.String.pareOrdinal(a,b);if(r》){return“{}_{}“.Fill(b,a);}else{return“{}_{}“.Fill(a,b);}}}对于枚举的处理,需要指定枚举为UserType,实现接口IUserTypeConvention,具体代码如下:publilassEnumConvention:IUserTypeConvention{publicvoidAept(IAeptanceCriteria《IPropertyInspector》criteria){criteria.Expect(x=》x.Property.PropertyType.IsEnum);}publicvoidApply(IPropertyInstanceinstance){instance.CustomType(instance.Property.PropertyType);}}实现了以上这几个接口,那么大部分情况下的Automapping都可以实现了。最后是将这些接口通知给FluentNhibernate,让其应用这些接口,导入指定Assembly中的DomainModel,具体的实现方法是:publicvirtualAutoPersistenceModelGenerate(stringdalAssemblies){varmappings=AutoMap.Assemblies(newAutoMapConfiguration(),domainAssemblies.Select(Assembly.LoadFrom).ToArray());foreach(varignoredBaseTypeinIgnoredBaseTypes){mappings.IgnoreBase(ignoredBaseType);}foreach(varincludeBaseTypeinIncludeBaseTypes){mappings.IncludeBase(includeBaseType);}mappings.Conventions.Setup(GetConventions());//指定了Automapping转换的接口实现foreach(vardalAssemblyindalAssemblies){mappings.UseOverridesFromAssembly(Assembly.LoadFrom(dalAssembly));}returnmappings;}publicstaticIList《Type》IgnoredBaseTypes=newList《Type》//这里列出的类都是些Base类,不会Mapping到具体某个表{typeof(Entity)//该对象其实就只有Id这个属性,作为所有要Mapping的类的父类};publicstaticIList《Type》IncludeBaseTypes=newList《Type》//默认情况下抽象类是不会Mapping成表的,所以这里需要指明这些类是要Mapping成表的{typeof(Classification),typeof(MultiClassification),typeof(Client)};protectedAction《IConventionFinder》GetConventions(){returnfinder=》{finder.Add《ClassNameConvention》();finder.Add《PrimaryKeyConvention》();finder.Add《CollectionConvention》();finder.Add《ReferenceConvention》();finder.Add《HasManyConvention》();finder.Add《SubClassNameConvention》();finder.Add《SubclassConvention》();finder.Add《PropertyConvention》();finder.Add《EnumConvention》();finder.Add《HasManyToManyConvention》();};}该方法返回了一个AutoPersistenceModel,使用这个对象注册到NHibernate中即可。

  mapping什么意思

  mapping的意思是地图,绘制地图是map的ing形式,句中作为名词和动词使用。

  vt.映射;计划;绘制地图;确定基因在染色体中的位置

  n.地图;示意图;染色体图

  n.(Map)人名;(法)马普

  WorldMap?世界地图;全世界电子地图;地界地图;世界舆图

  geologicmap?地质图;地质学;地质年代

  heatmap?热图;网站点击热图;热度图;热区图

  Logisticmap?单峰映象;Logistic映射;??逻辑斯谛映射;逻辑斯蒂映射

  mappuffer?条纹叉鼻鲀

  Heunfoldedthemapandsetitonthefloor.

  他展开地图,把它放在了地板上。

  He?was?talking?while?pointing?atthe?map.

  他一边用手指着地图一边讲话。

  map的近义词有schedule?,?propose?,?design?,?project,conventionaldiagram?,?schematicplan。

  vt.安排,计划;编制目录;将……列入计划表

  n.时间表;计划表;一览表

  Hehasbeenforcedtoadjusthisschedule.

  他已被迫调整了日程安排。

  Thespaceshuttlehadbeenscheduledtoblastoffat:.

  这架航天飞机计划于:发射升空。

  vt.建议;打算,计划;求婚

  vi.建议;求婚;打算

  Hamiltonproposedachangeinthetraditionaldebatingformat.

  汉密尔顿建议对传统的辩论形式作一个改变。

  HehasproposedaresolutionlimitingtheroleofU.S.troops.

  他提出了一项限制美军作用的决议。

您可能感兴趣的文章:

相关文章