gpt4 book ai didi

c# - 仅当 NHibernate 不存在表时才使用 Sql Server Compact 3.5 创建表

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:59 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的应用程序,将电子邮件/密码列表保存在一个表中,以存储我正在使用 Sql Server Compact 3.5 的数据

NHibernate 在使用 SchemaUpdate 时没有创建表,正如我所读,如果不存在,它应该创建表,但它没有创建表,我得到一个异常

这是我的 NHibernate 配置

public class NHibernateHelper
{
private static ISessionFactory sessionFactory;

private static ISessionFactory SessionFactory
{
get
{
if (sessionFactory == null)

InitializeSessionFactory();
return sessionFactory;
}
}

private static void InitializeSessionFactory()
{
sessionFactory =
Fluently.Configure()
.Database
(
MsSqlCeConfiguration.Standard
.ConnectionString(@"Data Source=E:\tumblr_db.sdf").ShowSql()
)
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<Email>()
)
.ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(true, true))
.BuildSessionFactory();
}

public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}

我的实体

public class Email
{
public virtual String Username { get; set; }
public virtual String Password { get; set; }
public virtual Guid Id { get; set; }
}

我的示例应用:

static class Program
{
[STAThread]
static void Main()
{

using (var session = NHibernateHelper.OpenSession())
{
using (var trans = session.BeginTransaction())
{
var email1 = new Email() { Username = "test@example.com", Password = "raj", };
session.Save(email1);

trans.Commit();
}
}
Console.Read();
}
}

最佳答案

你可以通过检查数据库文件是否已经存在来做到这一点,如果是这样,根据数据库文件的大小,你可以假设表是否已创建。看看下面这个例子你就会有所了解。

String DbFile = "E:\tumblr_db.sdf";
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(
SQLiteConfiguration.Standard
.UsingFile(DbFile)
)
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<Form1>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}

private static void BuildSchema(Configuration config)
{

if (!File.Exists(DbFile))
{
new SchemaExport(config)
.Create(false, true);
}
else
{
FileInfo info = new FileInfo(DbFile);
long size = info.Length;
if (size == 0)
{
new SchemaExport(config).Create(false, true);
}
}
}

关于c# - 仅当 NHibernate 不存在表时才使用 Sql Server Compact 3.5 创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20569827/

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