我在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) 给定使用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查询并点击数据库以获取每个孩子.为什么没有填充对象图?或者这是预期的行为?
我正在使用以下(简化)代码在ItemsControl中显示除第一个之外的所有项目中的元素:
<TheElement Visibility="{Binding RelativeSource={RelativeSource PreviousData},
Converter={StaticResource NullToVisibility}}/>
Run Code Online (Sandbox Code Playgroud)
NullToVisibility是一个简单的转换器,Visibility.Hidden如果源为null Visibility.Visible则返回,否则返回.
现在,这在最初绑定视图或向列表中添加元素(a ObservableCollection)时工作正常,但在删除第一个元素时,元素在第二个元素上不会被隐藏.
有想法该怎么解决这个吗?
是否可以从应用程序本身更改网站的应用程序设置?
这不是日常操作,而是自助服务重新配置选项.非开发人员可以更改特定设置,这应该会导致重新启动,就像我可以在网站配置页面上手动执行(应用程序设置部分)
我刚刚第一次设置了NHibernate.我的平台和配置设置如下:
我用测试项目创建了一个测试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) 我是新来的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) (开始之前:我知道这个和这个.我想找到一个更简洁的解决方案 - 如果可能的话 - 稍微更具体的问题)
我正在重写MVC中的旧Webforms应用程序.像往常一样,不应该破坏永久链接.
我正在使用标准{controller}/{action}/{id}路线.传统路径通常是SomePage.aspx?ID=xxx,我有一个特殊情况,其中Foo.aspx是Bar(新URL:/ Bar或/ Bar/Index)的列表,并且
Foo.aspx?ID=xxx是Bar详细信息(新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)
这有两个问题:
我可以手动映射遗留URL(我不需要通用解决方案,只有大约8页)
这是一个新项目,所以我没有任何关系.
有人可以用简单的英文解释我把问号放在哪里的代码行吗?或者也许请指向一篇能够说明这一点的文章.此代码用于在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) 我正在构建一个基于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) 具体来说,我想做的是从我的应用程序和库中引发新事件,类似于ADO.NET公开的事件.
真实场景:NHibernate的一个补丁,它显示了执行的查询,即使它们被缓存(因此,也没有到达ADO.NET层)
我发现了很多关于使用 Intellitrace和intellitrace 的文档,但没有关于生成它的文档.
这甚至可能吗?或者说,VS的内容中所有内容都是硬编码的?
nhibernate ×3
appsettings ×1
autofac ×1
azure ×1
batch-file ×1
binding ×1
c#-4.0 ×1
dynamic ×1
future ×1
generics ×1
intellitrace ×1
linq ×1
mvvm ×1
reflection ×1
sql ×1
sql-server ×1
wpf ×1