我有一个现有的DB模式,我试图用JPA/Hibernate注释进行ORM'ise.该模式旨在允许客户端使用表中的每一行来分配额外信息.现有解决方案不是使用键值模式,而是在安装时确定所需的动态列数,并更改表以为动态字段添加额外的列.实际上,每个表都有一组已知/固定列和一组动态列.
|table:X|
|id|known1|known2|dynamic1|dynamic2|..|dynamicx|
Run Code Online (Sandbox Code Playgroud)
参数表指示哪些表具有额外的动态字段
|table:parameter|
|table|column|meta|
|x|dynamic1||
|x|dynamic2||
|x|dynamicx||
|y|dynamic15||
Run Code Online (Sandbox Code Playgroud)
在JPA建模中,很容易为每个表上的已知固定列创建定义.
@Entity
@Table(name="x")
public class X
{
@Id
private Long id = null;
@Column(name="known1")
private Long known1 = null;
}
Run Code Online (Sandbox Code Playgroud)
我计划将参数表建模为一个类,然后允许我的每个类都有一个参数列表.我不确定我应该如何映射这个List对象,以便将详细信息写入同一个表.
@Entity
@Table(name="x")
public class X
{
// @Column(name="x",class="X") ??????????
List<Parameter> dynamicColumns = null;
}
Run Code Online (Sandbox Code Playgroud)
我相信我可以使用自定义命名策略来正确确定动态字段的列名称.这种映射甚至可能吗?
我们决定我们是否应该在规范camelCase或PascalCaseXAML的资源名称.
有人知道一种风格通常比另一种更受青睐吗?
微软是否有任何约定?
为了记录,我们使用camelCase字段(包括WPF控件,在极少数情况下,它们被命名)
为了避免宗教争论:我不是在寻找" 这种方法比其他方法更好,因为...... "的回应.一个好的答案将包括参考资料和/或统计数据的链接.
我有一个多租户应用程序,可以在生产中访问customer.ourdomain.com.对于使用IIS的本地开发,我们使用自定义通配符域company-localdev.com.
使用IIS,无需任何特定配置即可运行.另一方面,IIS Express仅绑定到localhost.
我们正在进行ASP.NET 5的迁移项目,我们希望使用IIS Express来获得更轻松的开发人员体验.
是否可以让IIS Express收听*.company-localdev.com:1234?如果这可以自动化,那么开发人员可以通过在IIS中打开解决方案来使其工作.
如何以编程方式在WPF ListView中设置所选项?
基本上,我有一个List<SomeEntity>和一个绑定到另一个的ListView List<SomeEntity>.我需要将第一个列表中存在的项目标记为已选中.
最近我一直在研究可用的基于.NET的ORM.我注意到每个人都会在一两个阵营中选址.在一个阵营中,首先创建数据库,ORM提供了一种更简单的方法来访问应用程序中的数据库.在第二阵营中,对象模型首先存在,ORM有助于将对象模型保存在数据库中.
现在我不是要求或断言一个阵营是否比另一个更好.我当然可以看到每种设计方法的原因.令我感到沮丧的是,我最近阅读的所有教程和"入门"文档都没有出现,并且在开头说"这个工具假设您从现有的数据库/对象模型开始".对我来说,这对于你是否会使用一个ORM而不是另一个来说非常重要.
因此,在做了一堆阅读并创建了几个"Hello World"项目之后,我已经在我所研究的ORM支持的工作流程上汇集了一系列要点.任何有这些工具经验的人都可以告诉我,我是否做了任何不正确的陈述,或完全错过了任何非常重要的观点.具体来说,我真的想知道我对数据库模式或对象模型是否应该首先使用每个工具的假设是正确的.
repo.Add<MyClass>(instance);<classname>.hbm.xml.net nhibernate linq-to-sql subsonic-active-record subsonic-simplerepository
我已经创建了一个WCF REST服务,它使用nhibernate连接到sql server compact edition数据库.因此,我配置NHibernate数据源,如:
<property name="connection.connection_string">Data Source=[Path]\MyDb.sdf</property>
Run Code Online (Sandbox Code Playgroud)
我现在遇到的烦恼是我无法弄清楚如何避免在配置中写出绝对路径.这很烦人,因为我将数据库文件保存为App_Data文件夹中项目的一部分.所以我不应该更新路径,例如当我将项目部署到另一个位置时,即使绝对路径不同.
使用procmon我注意到如果我不在数据源配置中写一个绝对pat,它被解释为相对于路径:*C:\ Program Files(x86)\ Common Files\Microsoft Shared\DevServer\10.0*.
是否有可能让nhibernate假设我们想要将路径与应用程序bin文件夹相关联(这是我的App_Data/MyDb.sdf结束的地方)?
我们的SaaS Web应用程序将MHT文件用于用户创建的模板.
这显然吓坏了用户,并且需要一些尴尬的步骤来解决,即使对于精通技术的人来说也是如此.
IE 11和Firefox 39对该文件没有任何问题.
有没有办法防止这个问题比重写我们的应用程序停止使用MHT文件更容易?
我正在尝试使用流畅的会话每个请求.我正在遵循nhibernate cookbook的"配方",但是它使用了nhibernate配置文件.
我不确定什么是更好但是现在我坚持使用流畅的配置只是因为我不知道如何设置nhibernate配置文件以使用流畅的映射和vanilla nhibernate映射(hbm文件).
namespace Demo.WebUI
{
public class MvcApplication : NinjectHttpApplication
{
public static ISessionFactory SessionFactory { get; private set; }
protected override void OnApplicationStarted()
{
SessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(
c => c.FromConnectionStringWithKey("test")))
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf
<Demo.Framework.Data.NhibernateMapping.UserMap>())
.ExposeConfiguration(BuidSchema)
.BuildSessionFactory();
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
var session = SessionFactory.OpenSession();
//CurrentSessionContext.Bind(session);
}
protected void Application_EndRequest(object sender, EventArgs e)
{
//var session = CurrentSessionContext.Unbind(SessionFactory);
SessionFactory.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在Begin_Request中可以看到的书籍教程
CurrentSessionContext.Bind(session);
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用它,它会抛出一个错误,因为我没有使用nhibernate配置文件.
那么如何更改它以使用流畅的配置?或者我甚至不需要这样做?(即它是在内部完成的吗?)
我在SqlServer中有两个简单的存储过程:
SetData(@id int, @data varchar(10))GetData(@id int).GetData 当前返回单行单列结果集,但如果需要,我可以将其更改为适当的函数.
从DbContext实例执行这些操作的最佳方法是什么?
如果可能的话,我想避免必须进行自己的连接状态管理和/或暴露EF特定类型.我首先检索ObjectContext并查看Execute*函数,但文档非常糟糕,缺少涉及存储过程的示例.
理想情况下,我希望能够做到这一点:
myContext.ExecuteNonQuery("SetData", id, data);
var data = myContext.ExecuteScalar<string>("GetData", id);
Run Code Online (Sandbox Code Playgroud) 我有以下WebApi方法从RavenDB返回无限制的结果流:
public IEnumerable<Foo> Get()
{
var query = DocumentSession.Query<Foo, FooIndex>();
using (var enumerator = DocumentSession.Advanced.Stream(query))
while (enumerator.MoveNext())
yield return enumerator.Current.Document;
}
Run Code Online (Sandbox Code Playgroud)
现在我想让那个异步.天真的方法当然不起作用:
public async Task<IEnumerable<Location>> Get()
{
var query = AsyncDocumentSession.Query<Foo, FooIndex>();
using (var enumerator = await AsyncDocumentSession.Advanced.StreamAsync(query))
while (await enumerator.MoveNextAsync())
yield return enumerator.Current.Document;
}
Run Code Online (Sandbox Code Playgroud)
...因为该方法不能同时是异步和迭代器.
nhibernate ×2
.net ×1
asp.net-core ×1
async-await ×1
c# ×1
config ×1
hibernate ×1
iis-express ×1
java ×1
jpa ×1
linq-to-sql ×1
listview ×1
mhtml ×1
orm ×1
ravendb ×1
sql-server ×1
wpf ×1
xaml ×1