我有一个应用程序,我使用Fluent Nhibernate来创建我的数据库.到目前为止,我每次都在重新创建数据库模式.执行此操作的代码是:
public NhibernateSessionFactory(IPersistenceConfigurer config)
{
_sessionFactory = Fluently.Configure().
Database(config).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>()).
ExposeConfiguration(BuildSchema).
BuildSessionFactory();
}
private static void BuildSchema(Configuration config)
{
// if (DbExists(config))
// return;
new SchemaExport(config).Create(false, true);
}
Run Code Online (Sandbox Code Playgroud)
注意" if (DbExists(config))".这就是我想做的.我只想在它实际上不存在的情况下创建模式.在下一步 - 如果它不是最新的,我想更新它.
我该如何实现这一目标?我期待一个config.DatabaseExists(),但我看不到这样的事情.我看到了hacky解决方案的一些可能性,但是处理这个问题的典型推荐方法是什么?
在我的扩展LinqToSql类中设置DataContext以便于访问的最佳实践是什么?
例如,我的dbml中有一个"User"实体,我想向这个类添加方法,如下所示:
Partial Public Class User
Public Function GetUser(ByVal UserID as Integer) as User
'Do Work
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
为了访问我的DataContext,我必须在方法中声明它,如下所示:
Partial Public Class User
Public Function GetUser(ByVal UserID as Integer) as User
Dim dc as New MyDataContext()
Return (From u in dc.Users Where u.ID = UserID).Single()
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
我不想为每一种方法都这样做.通常(如果我没有扩展LinqToSql dbml类)我可以这样做:
Partial Public Class User
Private dc as MyDataContext
Public Sub New()
dc = new MyDataContext()
End Sub
Public Function GetUser(ByVal UserID as Integer) as User
Return (From …Run Code Online (Sandbox Code Playgroud)