小编Die*_*hon的帖子

从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万
查看次数

NHibernate未来对象图很多查询

给定使用Future调用多级对象图:

var Dads = db.Session.Query<Parent>().Where(P => P.EntityKey == Id)
             .ToFuture<Parent>();
var Kids = db.Session.Query<Kid>().Where(K => K.Parent.EntityKey == Id)
             .ToFuture<Kid>();
Run Code Online (Sandbox Code Playgroud)

当我调用var Dad = dads.ToList()时,我看到批处理通过导线并显示在探查器中.

问题是在枚举集合时它仍然向db发送一个查询

例如.

for each (Kid kid in Dad.Kids) // This seems to hit the database 
{
   Teach(kid);
}
Run Code Online (Sandbox Code Playgroud)

发送SQL查询并点击数据库以获取每个孩子.为什么没有填充对象图?或者这是预期的行为?

sql nhibernate future batch-file

7
推荐指数
1
解决办法
1183
查看次数

删除集合元素时{RelativeSource PreviousData}的问题

我正在使用以下(简化)代码在ItemsControl中显示除第一个之外的所有项目中的元素:

<TheElement Visibility="{Binding RelativeSource={RelativeSource PreviousData},
                                 Converter={StaticResource NullToVisibility}}/>
Run Code Online (Sandbox Code Playgroud)

NullToVisibility是一个简单的转换器,Visibility.Hidden如果源为null Visibility.Visible则返回,否则返回.

现在,这在最初绑定视图或向列表中添加元素(a ObservableCollection)时工作正常,但在删除第一个元素时,元素在第二个元素上不会被隐藏.

有想法该怎么解决这个吗?

wpf binding mvvm

7
推荐指数
1
解决办法
3117
查看次数

从代码更改Azure网站应用程序设置

是否可以从应用程序本身更改网站的应用程序设置?

这不是日常操作,而是自助服务重新配置选项.非开发人员可以更改特定设置,这应该会导致重新启动,就像我可以在网站配置页面上手动执行(应用程序设置部分)

appsettings azure azure-web-sites

7
推荐指数
3
解决办法
3805
查看次数

使用ODP.NET配置NHibernate 3.0

我刚刚第一次设置了NHibernate.我的平台和配置设置如下:

  • 数据库:Oracle 11.1g
  • ODP.NET版本:4.112.1.2(从ODTWithODAC112012安装,这是我的Oracle数据库安装之上的1版本)
  • NHibernate 3.0版

我用测试项目创建了一个测试MVC应用程序.然后,为了测试NHibernate连接,我使用以下测试夹具:

using IBCService.Models;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using NUnit.Framework;
namespace IBCService.Tests
{
    [TestFixture]
    public class GenerateSchema_Fixture
    {
        [Test]
        public void Can_generate_schema()
        {
            var cfg = new Configuration();
            cfg.Configure();
            cfg.AddAssembly(typeof(Product).Assembly);
            new SchemaExport(cfg).Execute(false, true, false);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Nhibernate配置文件:

<?xml version="1.0" encoding="utf-8"?>
<!-- This config use Oracle Data Provider (ODP.NET) -->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="NHibernate.Test">
    <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
    <property name="connection.connection_string">
      User ID=TEST;Password=******;Data Source=//RAND
    </property>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="show_sql">false</property>
    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', …
Run Code Online (Sandbox Code Playgroud)

nhibernate

6
推荐指数
1
解决办法
9391
查看次数

NHibernate - 查询特定列并返回不同的记录?

我是新来的NH.

我在遗留数据库中有一个表,如下所示:

Id,
CompanyId,
Description,
[LOADS of other columns here]
Run Code Online (Sandbox Code Playgroud)

我想使用NHibernate返回一个DISTINCT数据集,只选择特定的列并使用WHERE语句.SQL看起来像这样:

SELECT DISTINCT
     [table_name].CompanyId, 
     [table_name].Description 
FROM 
     [table_name]
WHERE
     [table_name].CompanyId = 2
Run Code Online (Sandbox Code Playgroud)

谷歌搜索了这个我想出来:

ProjectionList projections = Projections.ProjectionList();
projections.Add(Projections.Property("CompanyId"), "CompanyId");
projections.Add(Projections.Property("Name"), "SomeName");


var companyDto = session.QueryOver<Company>()
    .Where(x => x.CompanyId == 2)
    .Select(projections)
    .TransformUsing(Transformers.AliasToBean<CompanyDto>())
    .List<CompanyDto>();

if (companyDto != null)
   Console.WriteLine(string.Format("{0}, {1}", companyDto.CompanyId, companyDto.SomeName));
Run Code Online (Sandbox Code Playgroud)

DTO的地方是:

public class CompanyDto
{
  public int CompanyId { get; set; }
  public string SomeName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

实体是:

public class Company
{
    public virtual int Id { …
Run Code Online (Sandbox Code Playgroud)

nhibernate

6
推荐指数
1
解决办法
5969
查看次数

使用和不使用查询字符串路由旧请求

(开始之前:我知道这个这个.我想找到一个更简洁的解决方案 - 如果可能的话 - 稍微更具体的问题)

我正在重写MVC中的旧Webforms应用程序.像往常一样,不应该破坏永久链接.

我正在使用标准{controller}/{action}/{id}路线.传统路径通常是SomePage.aspx?ID=xxx,我有一个特殊情况,其中Foo.aspxBar(新URL:/ Bar/ Bar/Index)的列表,并且 Foo.aspx?ID=xxxBar详细信息(新URL:/ Bar/View/xxx)

一种可能的解决方法是在默认值之前添加以下内容MapRoute:

routes.MapRoute("Bar View", "Foo.aspx",
                new { controller = "Bar", action = "View" });
Run Code Online (Sandbox Code Playgroud)

然后在BarController中定义相应的操作:

public ActionResult View(int? id)
{
    if (id == null)
        return RedirectToAction("Index");
    return View();
}
Run Code Online (Sandbox Code Playgroud)

这有两个问题:

  • 现在,如果我创建一个ActionLink,它将使用旧格式
  • 我想在路线上处理这件事; 使id可以为空并在控制器中重定向是错误的

我可以手动映射遗留URL(我不需要通用解决方案,只有大约8页)

这是一个新项目,所以我没有任何关系.

asp.net-mvc-routing asp.net-mvc-3

6
推荐指数
1
解决办法
1040
查看次数

Autofac中的InstancePerLifetimeScope是什么?

有人可以用简单的英文解释我把问号放在哪里的代码行吗?或者也许请指向一篇能够说明这一点的文章.此代码用于在autofac容器中注册依赖项

var builder = new Autofac.ContainerBuilder();


builder.Register<NHibernateInstance>(c => 
    new NHibernateInstance(ConnString, false))
       .InstancePerDependency();//?????

builder.Register(c => c.Resolve<NHibernateInstance>()
    .GetFactory().OpenSession())
    .As<ISession>()
    .InstancePerLifetimeScope(); //-----?????
Run Code Online (Sandbox Code Playgroud)

autofac

6
推荐指数
1
解决办法
5814
查看次数

使用在运行时解析的类型调用System.Linq.Queryable方法

我正在构建一个基于LINQ的查询生成器.

其中一个功能是能够指定任意服务器端投影作为查询定义的一部分.例如:

class CustomerSearch : SearchDefinition<Customer>
{
    protected override Expression<Func<Customer, object>> GetProjection()
    {
        return x => new
                    {
                        Name = x.Name,
                        Agent = x.Agent.Code
                        Sales = x.Orders.Sum(o => o.Amount)
                    };
    }
}
Run Code Online (Sandbox Code Playgroud)

由于用户必须能够对投影属性进行排序(而不是Customer属性),我将表达式重新创建为:Func<Customer,anonymous type>而不是Func<Customer, object>:

//This is a method on SearchDefinition
IQueryable Transform(IQueryable source)
{
    var projection = GetProjection();
    var properProjection = Expression.Lambda(projection.Body,
                                             projection.Parameters.Single());
Run Code Online (Sandbox Code Playgroud)

为了返回预计的查询,我希望能够做到这一点(事实上,它在一个几乎相同的概念证明中工作):

return Queryable.Select((IQueryable<TRoot>)source, (dynamic)properProjection);
Run Code Online (Sandbox Code Playgroud)

TRoot是SearchDefinition中的类型参数.这导致以下异常:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:
The best overloaded method match for
'System.Linq.Queryable.Select<Customer,object>(System.Linq.IQueryable<Customer>,
 System.Linq.Expressions.Expression<System.Func<Customer,object>>)'
has some invalid arguments
   at CallSite.Target(Closure , CallSite …
Run Code Online (Sandbox Code Playgroud)

linq generics reflection dynamic c#-4.0

5
推荐指数
1
解决办法
1342
查看次数

是否可以扩展Intellitrace事件?

具体来说,我想做的是从我的应用程序和库中引发新事件,类似于ADO.NET公开的事件.

真实场景:NHibernate的一个补丁,它显示了执行的查询,即使它们被缓存(因此,也没有到达ADO.NET层)

我发现了很多关于使用 Intellitrace和intellitrace 的文档,但没有关于生成它的文档.

这甚至可能吗?或者说,VS的内容中所有内容都是硬编码的?

visual-studio-2010 intellitrace

5
推荐指数
1
解决办法
300
查看次数