C#-NHibernate和版本控制(时间戳)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-NHibernate和版本控制(时间戳),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3884字,纯文字阅读大概需要6分钟。
内容图文
我有这个例外
at System.Convert.ToDateTime(Object value)
at NHibernate.Type.DateTimeType.Get(IDataReader rs, Int32 index) in p:\nhibernate-core\src\NHibernate\Type\DateTimeType.cs:line 43
我想系统尝试将rowversion转换为datetime时发生了错误
这是我获取列表的方法
public static IList<Employee> getEmployees()
{
using (ISession mySession = SessionFactory().OpenSession())
{
using (ITransaction myTransaction = mySession.BeginTransaction())
{
return mySession.CreateCriteria<Employee>().List<Employee>();
}
}
}
这是我的课
public class Employee {
private int _id;
private Rank _rank;
private string _visa;
private string _firstName;
private string _lastName;
private string _university;
private DateTime _rowversion;
public Employee() {
EmployeeFunctionInProject = new List<EmployeeFunctionInProject>();
Group = new List<Group>();
}
public virtual int Id {
get {
return this._id;
}
set {
this._id = value;
}
}
public virtual Rank Rank {
get {
return this._rank;
}
set {
this._rank = value;
}
}
public virtual string Visa {
get {
return this._visa;
}
set {
this._visa = value;
}
}
public virtual string FirstName {
get {
return this._firstName;
}
set {
this._firstName = value;
}
}
public virtual string LastName {
get {
return this._lastName;
}
set {
this._lastName = value;
}
}
public virtual string University {
get {
return this._university;
}
set {
this._university = value;
}
}
public virtual DateTime Rowversion {
get {
return this._rowversion;
}
set {
this._rowversion = value;
}
}
public virtual IList<EmployeeFunctionInProject> EmployeeFunctionInProject { get; set; }
public virtual IList<Group> Group { get; set; }
}
这是我的地图
<hibernate-mapping assembly="MyWeb11" namespace="MyWeb11.Models" xmlns="urn:nhibernate-mapping-2.2">
<class name="Employee" table="EMPLOYEE" lazy="true" >
<id name="Id" column="ID">
<generator class="identity" />
</id>
<many-to-one name="Rank">
<column name="RANK" sql-type="int" not-null="true" />
</many-to-one>
<property name="Visa">
<column name="VISA" sql-type="varchar" not-null="true" unique="true" />
</property>
<property name="FirstName">
<column name="FIRST_NAME" sql-type="varchar" not-null="true" />
</property>
<property name="LastName">
<column name="LAST_NAME" sql-type="varchar" not-null="true" />
</property>
<property name="University">
<column name="UNIVERSITY" sql-type="varchar" not-null="true" />
</property>
<property name="Rowversion">
<column name="ROWVERSION" sql-type="timestamp" not-null="true" />
</property>
<bag name="EmployeeFunctionInProject" inverse="true">
<key column="EMPLOYEE" />
<one-to-many class="EmployeeFunctionInProject" />
</bag>
<bag name="Group" inverse="true">
<key column="LEADER" />
<one-to-many class="Group" />
</bag>
</class>
</hibernate-mapping>
我已经搜索了一种解决方案,但没有找到解决方案.任何帮助表示赞赏.提前致谢!
解决方法:
我希望您使用的SQL Server时间戳不是DateTime值.没有任何共同之处.请参阅(最新名称为rowversion)-rowversion (Transact-SQL)
Is a data type that exposes automatically generated, unique binary numbers within a database. rowversion is generally used as a mechanism for version-stamping table rows. The storage size is 8 bytes. The rowversion data type is just an incrementing number and does not preserve a date or a time. To record a date or time, use a datetime2 data type.
我的建议是,与NHiberante的< version>功能一起使用时,请确实使用该类型的列(行版本/时间戳).属性.看到:
> 5.1.7. version (optional)
>艾恩德NHibernate Mapping – Concurrency
有一个映射片段:
<version name="Timestamp " generated="always"
unsaved-value="null" type="BinaryBlob">
<column name="Version" not-null="false"
sql-type="timestamp"/>
</version>
如果我们需要将该二进制内容传递给客户端,我们可以将其转换为字符串属性,请参见:
> Optimistic concurrency out of session in NHibernate
属性作为C#代码:
protected virtual byte[] Timestamp { get; set; }
public virtual string Version
{
get { return Timestamp.IsEmpty() ? null : Convert.ToBase64String(Timestamp); }
set { Timestamp = value.IsEmpty() ? null : Convert.FromBase64String(value); }
}
内容总结
以上是互联网集市为您收集整理的C#-NHibernate和版本控制(时间戳)全部内容,希望文章能够帮你解决C#-NHibernate和版本控制(时间戳)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。