小编Die*_*hon的帖子

JPA/Hibernate将动态列映射为对象列表

我有一个现有的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)

我相信我可以使用自定义命名策略来正确确定动态字段的列名称.这种映射甚至可能吗?

java orm hibernate jpa

10
推荐指数
1
解决办法
8366
查看次数

XAML资源命名约定

我们决定我们是否应该在规范camelCasePascalCaseXAML的资源名称.

有人知道一种风格通常比另一种更受青睐吗?

微软是否有任何约定?

为了记录,我们使用camelCase字段(包括WPF控件,在极少数情况下,它们被命名)

为了避免宗教争论:我不是在寻找" 这种方法比其他方法更好,因为...... "的回应.一个好的答案将包括参考资料和/或统计数据的链接.

xaml naming-conventions

10
推荐指数
1
解决办法
2381
查看次数

IIS Express + VS 2015中的通配符主机名

我有一个多租户应用程序,可以在生产中访问customer.ourdomain.com.对于使用IIS的本地开发,我们使用自定义通配符域company-localdev.com.

使用IIS,无需任何特定配置即可运行.另一方面,IIS Express仅绑定到localhost.

我们正在进行ASP.NET 5的迁移项目,我们希望使用IIS Express来获得更轻松的开发人员体验.

是否可以让IIS Express收听*.company-localdev.com:1234?如果这可以自动化,那么开发人员可以通过在IIS中打开解决方案来使其工作.

iis-express asp.net-core

10
推荐指数
3
解决办法
6573
查看次数

以编程方式选择WPF ListView中的项目

如何以编程方式在WPF ListView中设置所选项?

基本上,我有一个List<SomeEntity>和一个绑定到另一个的ListView List<SomeEntity>.我需要将第一个列表中存在的项目标记为已选中.

wpf listview

9
推荐指数
1
解决办法
9865
查看次数

ORM比较:首先是数据库还是类?

最近我一直在研究可用的基于.NET的ORM.我注意到每个人都会在一两个阵营中选址.在一个阵营中,首先创建数据库,ORM提供了一种更简单的方法来访问应用程序中的数据库.在第二阵营中,对象模型首先存在,ORM有助于将对象模型保存在数据库中.

现在我不是要求或断言一个阵营是否比另一个更好.我当然可以看到每种设计方法的原因.令我感到沮丧的是,我最近阅读的所有教程和"入门"文档都没有出现,并且在开头说"这个工具假设您从现有的数据库/对象模型开始".对我来说,这对于你是否会使用一个ORM而不是另一个来说非常重要.

因此,在做了一堆阅读并创建了几个"Hello World"项目之后,我已经在我所研究的ORM支持的工作流程上汇集了一系列要点.任何有这些工具经验的人都可以告诉我,我是否做了任何不正确的陈述,或完全错过了任何非常重要的观点.具体来说,我真的想知道我对数据库模式或对象模型是否应该首先使用每个工具的假设是正确的.

Linq To SQL

  • 数据库应该首先存在
  • 仅适用于SQL Server
  • DataContext类用于在类和数据库之间进行读/写
  • DataContext可以重新调用实际物理类,或者动态类型可以用于根据数据库模式自动创建类型.
  • 映射默认为映射表名到类名,属性名到列名
  • 可以通过嵌入在每个类中的属性来定制映射

亚音速(活跃记录)

  • 应首先创建数据库
  • 使用许多数据库技术
  • 使用T4模板从现有数据库模式自动生成类
  • 生成类后,与数据库的连接完全透明
    • 调用类构造函数会自动创建数据库中的记录
    • 更改属性值会自动更新数据库.

亚音速(简易存储库)

  • 类结构应该是第一位的
  • 使用许多数据库技术
  • 创建存储库类并将其连接到数据库
  • 当类添加到存储库时,会自动创建和更新数据库模式
    • repo.Add<MyClass>(instance);
    • 存储库使用反射来创建/更新数据库模式
    • 每次创建一个表,并为每个属性创建一列

NHibernate的

  • 可以首先创建数据库或类结构
    • 可以创建映射以将新类结构与现有数据库匹配
    • 映射可用于自动生成数据库模式
  • 使用许多数据库技术
  • 最终程序集中的类归属于NHibernate映射设置,这些设置将类和属性映射到表和列
  • 添加映射配置有两种方法
    • XML文件嵌入二进制文件中, <classname>.hbm.xml
    • 添加到代码中的属性
  • 支持高级映射配置,包括一对一,一对一,多对一,多对多,继承等.等...

.net nhibernate linq-to-sql subsonic-active-record subsonic-simplerepository

9
推荐指数
1
解决办法
1083
查看次数

配置文件中数据库文件的相对路径

我已经创建了一个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结束的地方)?

config sql-server-ce

9
推荐指数
1
解决办法
3748
查看次数

从Chrome下载MHT文件

我们的SaaS Web应用程序将MHT文件用于用户创建的模板.

最近,Chrome开始阻止下载,显示以下消息: 受阻

这显然吓坏了用户,并且需要一些尴尬的步骤来解决,即使对于精通技术的人来说也是如此.

IE 11和Firefox 39对该文件没有任何问题.

有没有办法防止这个问题比重写我们的应用程序停止使用MHT文件更容易?

google-chrome mhtml

9
推荐指数
1
解决办法
1万
查看次数

currentsessioncontext流利的nhibernate怎么办呢?

我正在尝试使用流畅的会话每个请求.我正在遵循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配置文件.

那么如何更改它以使用流畅的配置?或者我甚至不需要这样做?(即它是在内部完成的吗?)

nhibernate fluent-nhibernate

8
推荐指数
1
解决办法
6843
查看次数

从DbContext执行存储过程

我在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)

sql-server entity-framework-4.1

8
推荐指数
1
解决办法
2万
查看次数

返回查询结果的异步流

我有以下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)

...因为该方法不能同时是异步和迭代器.

c# ravendb async-await asp.net-web-api

8
推荐指数
2
解决办法
4031
查看次数