gpt4 book ai didi

c# - 使用 C# 和 Fluent Nhibernate 在 MySQL 中使用 DateTime 保存毫秒精度

转载 作者:行者123 更新时间:2023-11-29 21:46:02 25 4
gpt4 key购买 nike

我一直在尝试将 C# DateTime 保存到 MySQL datetime(6),但没有取得太大成功。我需要以毫秒精度存储日期时间。这是我设置测试表的方法。

create table test_date_time
(
ID int not null auto_increment
, Created_By datetime(6)
, primary key (ID)
);

在 C# 中,我指定实体类型和字段映射,如下所示:

public class test_date_time
{
public virtual long ID { get; set; }

public virtual DateTime? Created_By { get; set; }
}

public class test_date_time_Map : ClassMap<test_date_time>
{
public test_date_time_Map()
{
Id(x => x.ID);
Map(x => x.Created_By);
}

}

这是我如何连接到数据库并存储日期时间:

string Connection_String = string.Format(@"Server={0};Database={1};Uid={2};Pwd={3};SSL Mode=Required;CertificateFile={4};"
, Server, Database, User, Password, Certificate_File);

ISessionFactory Session_Factory = Fluently.Configure()
.Database(MySQLConfiguration.Standard.ConnectionString(Connection_String))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<test_date_time_Map>())
.BuildSessionFactory();

var Session = Session_Factory.OpenSession();

var t = new test_date_time() { Created_By = DateTime.UtcNow };
Session.SaveOrUpdate(t);

Session.CreateCriteria<test_date_time>().List<test_date_time>();

var Status = Session.CreateCriteria<test_date_time>().List<test_date_time>();

Session.Close();

通过阅读各种帖子,我还尝试通过以下方式将映射更改为自定义类型:

public class test_date_time_Map : ClassMap<test_date_time>
{
public test_date_time_Map()
{
Id(x => x.ID);
Map(x => x.Created_By).CustomType("datetime(6)");
}

}

但这只会导致异常“无法确定类型:datetime(6),对于列:NHibernate.Mapping.Column(Created_By)”

有人知道如何保存亚秒精度吗?

最佳答案

使用 NullSafeSet 实现创建一个新的用户类型(实现 IUserType),以所需的精度执行 ToString()。 (例如,DateTimeWithMilliseconds)

然后,您可以编写自定义约定以将其应用于所有日期时间(如果您使用自动映射),或者执行以下操作:

Map(x => x.Created_By).CustomType<DateTimeWithMilliseconds>()

在您的映射中。

关于c# - 使用 C# 和 Fluent Nhibernate 在 MySQL 中使用 DateTime 保存毫秒精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34110503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com