MVC+NHibernate笔记

Nhibernate 要求model实体类对于lazy="true" ,字段属性前需要加 virtual

sqlserver2005和oracle10g的hibernate.cfg.xml如何配置?
A:sqlserver2005配置如下
<!-- NHibernate sqlserver2005配置-->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
 <session-factory name="db1">
   <!-- properties -->
   <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
   <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
   <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
   <property name="connection.connection_string">
     Server=.;initial catalog=NhibernateTest;User Id=sa;Password=sa
   </property>
   <property name="use_outer_join">true</property>
   <property name="use_proxy_validator">true</property>
   <!--<property name="show_sql">false</property>-->
   <!--<property name="query.substitutions">true 1, false 0, yes ‘Y‘, no ‘N‘</property>-->
   <!-- mapping files -->
   <mapping assembly="Kang.Model" />
 </session-factory>
</hibernate-configuration>

Oracle10g配置如下:
<!-- NHibernate Oracle10g配置--> 
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
 <session-factory name="db1">
   <!-- properties -->
   <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
   <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver&lt</property>
   <property name="dialect">NHibernate.Dialect.Oracle9Dialect&lt</property>
   <property name="connection.connection_string">
     data source=KANGSHI;User ID=huobj;Password=huobj
   </property>
   <property name="use_outer_join">true</property>
   <property name="use_proxy_validator">true</property>
   <!--<property name="show_sql">false</property>-->
   <!--<property name="query.substitutions">true 1, false 0, yes ‘Y‘, no ‘N‘</property>-->
   <!-- mapping files -->
   <mapping assembly="Kang.Model" />
 </session-factory>
</hibernate-configuration>

Q:无法将类型为“NHibernate.Dialect.MsSqlCeDialect”的对象强制转换为类型“NHibernate.Driver.IDriver”。 
A:当切换数据库时,相应的connection.driver_class属性是需要调整 
 oracle10g是NHibernate.Driver.OracleClientDriver
 MsSql2005是NHibernate.Driver.SqlClientDriver

Q:could not execute query
A:总的原则是,Nhibernate查询还是遵守sql原规则的。
1 字段名称不对,
2 字段格式不对,注意日期、数字和字符
3<property type="string" length="50" name="RoleName" column="[RoleName]" />
oracle必须把RoleName的[]去掉。而sqlsever去不用去[]都行。

Q:The type System.Int32 can not be assigned to a property of type System.String setter of Kang.Model.Entities.USR_UserInfo.LoginID
A: 主键LoginID原定义的是int ,应该改成string

Q:Invalid Cast (check your mapping for property type mismatches); setter of Kang.Model.Entities.USR_UserInfo
A:length="80" 必须小于数据库表中字段的长度。另外,就是实体类中属性类的类型要和nhibernate-mapping 中的type同。

Q:数据库中的Date、DateTime和TimeStamp类型区别?
A:
DATETIME, DATE和TIMESTAMP类型是相关的。本文描述他们的特征,他们是如何类似的而又不同的。
DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以‘YYYY-MM-DD HH:MM:SS‘格式显示DATETIME值,支持的范围是‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘。(“支持”意味着尽管更早的值可能工作,但不能保证他们可以。) 
DATE类型用在你仅需要日期值时,没有时间部分。MySQL检索并且以‘YYYY-MM-DD‘格式显示DATE值,支持的范围是‘1000-01-01‘到‘9999-12-31‘。 
TIMESTAMP列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。

SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。
滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间。
参数名: ticks 
A:实体类中这样定义就ok了  private DateTime _CreateDate = new DateTime(2009 - 9 - 9);

Q:有的哥们这么写,但是问题是麻烦。
            var whitelist = new[] { "UserId", "UserName", "UserParssord", "UserMail" };
               UpdateModel(user, whitelist);
               uService.UpdateUserInfo(user); 
               return RedirectToAction("Index");
A:     可以这样写
              model = bll.GetModel(id);
               UpdateModel(model);
               bll.UpdateData(model);
               return RedirectToAction("Index")

父子表关联映射 ============================================== 
Q: 用户代码未处理 NHibernate.PropertyAccessException
 Message="Invalid Cast (check your mapping for property type mismatches); setter of Kang.Model.Entities.USR_UserInfo"
 Source="Kang.NHibernateHelper"
 A:<!--多对一关系:Users属于一个Role-->
 <many-to-one name="RoleID" column="RoleID" not-null="true" class="Kang.Model.Entities.RoleInfo" foreign-key="FK_RoleUsers" />

<!--一对多关系:Role有一个或多个Users-->
   <set name="Users" table="`USR_UserInfo`" generic="true" inverse="true">
     <key column="RoleInfo" foreign-key="FK_RoleUsers"/>
     <one-to-many class="Kang.Model.Entities.USR_UserInfo"/>
   </set>

Q:Duplicate property mapping of RoleID found in Kang.Model.Entities.USR_UserInfo
A:有重复的属性定义。属性对象化,页面调用显示时可以再调用属性的属性,如:model.RoleID.RoleName

Q:Could not initialize proxy - the owning Session is disconnected
A:对于父子关联表,把lazy="false"

时间: 2024-10-13 10:47:21

MVC+NHibernate笔记的相关文章

Spring MVC 学习笔记(二):@RequestMapping用法详解

一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置 <servlet>     <servlet-name>servletName</servlet-name>     <servlet-class>ServletClass</servlet-class> </servlet>

MVC学习笔记索引帖

[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习笔记]4.使用Log4Net来进行错误日志的记录 [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验) [MVC学习笔记]6. 使用Memcache+Cookie解决分布式系统共享登录状态 [MVC学习笔记]7.使用极验验证来制作更高逼格的验证码

[Spring MVC]学习笔记--DispatcherServlet

在上一篇我们介绍了Servlet,这一篇主要来看一下MVC中用到的DispatcherServlet(继承自HttpServlet). 1. DispatcherServlet在web.xml中被声明. <web-app> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet&l

.NET MVC学习笔记(一)

看了些关于MVC的资料,做一些MVC的笔记. 分解关注点 在MVC世界里有个很重要的观念--"分解关注点"(Separation of Concerns),指的是:当你进行软件开发时,可一直关注当前的对象,而不会受到同样的系统中其它对象的干扰,进而专注于完毕开发工作.如此一来,不但easy提升软件质量,也能够加快对代码的理解速度. 分解关注点观念的特征与优势 简化复杂度 大幅提升可维护性 更易于測试 对开发ASP.net MVC项目的建议 不要反复你自己: 好的软件不应该有太多反复的程

Spring MVC学习笔记(一)--------准备篇

这一系列笔记将带你一步一步的进入Spring MVC,高手勿喷. 首先你得安装以下的工具: JDK,虽然JDK8已经发布了一段时间了,但是由于我们并不会使用到里面的新特性,所以JDK6以上版本皆可以(需加入到PATH环境变量中): Servlet Container,为了能运行WEB应用程序,因此需要一个Web Container,这里我们建议Tomcat即可: IDE,一个好的IDE不仅能提高你开发的效率,还能降低你学习的成本,我们选择的是IntelliJ: 构建工具,推荐使用Gradle,它

[转]Spring MVC 学习笔记 json格式的输入和输出

Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用 <!-- json --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-lgpl</artifactId> <version>1.8.1</version>

[Spring MVC]学习笔记--基础Servlet

Servlet是一个用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端. Servlet的客户端提出请求并获得该请求的响应. 对于所有的客户端请求,只需要创建Servlet的实例一次(这是和CGI(Common Gateway Interface)的重要区别,CGI是每个请求创建一个新实例),因此节省了大量的内存. Servlet在初始化后即驻留内存中,因此每次作出请求时无需加载. 下面通过一个例子来介绍如何编写一个简单的Servlet. 准备工作: 1. 下载并启动To

[Spring MVC]学习笔记--表单标签的使用

github例子地址: https://github.com/lemonbar/spring-mvc-jsp 效果图 关于spring mvc的标签的讲解, 有一篇blog已经讲的很细了. http://haohaoxuexi.iteye.com/blog/1807330 官方文档地址: http://docs.spring.io/spring/docs/4.0.6.RELEASE/spring-framework-reference/htmlsingle/#view-jsp 而且我在上面的例子

[Spring MVC]学习笔记--@RequestMapping

@RequestMapping是用来将请求的url,映射到整个类,或者里面的方法. @Controller @RequestMapping("/test") public class TestController { private final TestService service; @Autowired public TestController(TestService testService) { this.service = testService; } @RequestMap