我想知道在执行LINQ to ADO.net数据服务查询时是否有使用Expand关键字的替代方法.expand方法确实为我提供了我感兴趣的数据,但是它要求我知道我将要提前使用的所有子对象.我绝对的偏好是,当我访问它们时,这些子对象将被延迟加载,但这看起来不是一个选项(我可以将这个延迟加载添加到该子对象属性的get,但它当我更新数据服务引用时会被删除).
有没有人对这种情况有任何建议/最佳做法/替代方案?谢谢.
=====使用具有MailingAddress的成员的示例代码=====
作品:
var me = (from m in ctx.Member.Expand("MailingAddress")
where m.MemberID == 10000
select m).First();
MessageBox.Show(me.MailingAddress.Street);
Run Code Online (Sandbox Code Playgroud)
会不会喜欢(真的很想,如果然后去了并加载了MailingAddress)
var me = (from m in ctx.Member
where m.MemberID == 10000
select m).First();
MessageBox.Show(me.MailingAddress.Street);
Run Code Online (Sandbox Code Playgroud)
或者至少(注意:类似于此,使用MailingAddressReference,如果我在服务操作中执行LINQ to Entities,则在服务器端工作)
var me = (from m in ctx.Member
where m.MemberID == 10000
select m).First();
if (!(me.MailingAddress.IsLoaded())) me.MailingAddress.Load()
MessageBox.Show(me.MailingAddress.Street);
Run Code Online (Sandbox Code Playgroud) 我如何模拟DataServiceQuery以进行单元测试?
详细信息如下:想象一个ASP.NET MVC应用程序,其中控制器与ADO.NET DataService对话,封装了我们模型的存储(例如,我们将阅读Customers列表).通过对服务的引用,我们得到一个继承自DataServiceContext的生成类:
namespace Sample.Services
{
public partial class MyDataContext : global::System.Data.Services.Client.DataServiceContext
{
public MyDataContext(global::System.Uri serviceRoot) : base(serviceRoot) { /* ... */ }
public global::System.Data.Services.Client.DataServiceQuery<Customer> Customers
{
get
{
if((this._Customers==null))
{
this._Customers = base.CreateQuery<Customer>("Customers");
}
return this._Customers;
}
}
/* and many more members */
}
}
Run Code Online (Sandbox Code Playgroud)
财务主任可以是:
namespace Sample.Controllers
{
public class CustomerController : Controller
{
private IMyDataContext context;
public CustomerController(IMyDataContext context)
{
this.context=context;
}
public ActionResult Index() { return View(context.Customers); }
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用了一个接受IMyDataContext实例的构造函数,以便我们可以在单元测试中使用mock:
[TestFixture]
public class …Run Code Online (Sandbox Code Playgroud) 我的团队正在评估更大的商业门户网站.(发票,簿记,工资.....)
我们都习惯使用DDD,O/R映射器和NHibernate作为我们的首选.我们选择使用CompositeWPF来保持业务门户中所有模块和部件系统之间的模块化.
现在我们已经对Ria Services进行了评估,并且对于它如何以面向数据的方式工作感到失望,面向数据的方面可以很好地面向服务的方案,但我们觉得我们可以采用面向对象的方法,我们觉得我们可以使用OO方法获得比DO方法更低复杂度的应用程序.例如,它不允许值对象,多对多关系,一切都需要有键等等.
我们还没有看过WCF数据服务,所以我们的问题是WCF数据服务我们的回答?它是否与Silverlight 4很好地集成?我们能否以OO方式使用它?
我使用一些代码(可在这里对MSDN)动态地建立包含多个OR"条款" LINQ表达式.
相关代码是
var equals = values.Select(value => (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue))));
var body = equals.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal));
Run Code Online (Sandbox Code Playgroud)
这会生成一个LINQ表达式,如下所示:
(((((ID = 5) OR (ID = 4)) OR (ID = 3)) OR (ID = 2)) OR (ID = 1))
Run Code Online (Sandbox Code Playgroud)
我在使用这个表达式时遇到了递归限制(100),所以我想生成一个如下所示的表达式:
(ID = 5) OR (ID = 4) OR (ID = 3) OR (ID = 2) OR (ID = 1)
Run Code Online (Sandbox Code Playgroud)
如何修改表达式构建代码来执行此操作?
我正在寻找通过慢速卫星连接创建数据查询WCF服务,我真的很喜欢WCF数据服务.我看到的问题是HTTP是一种非常冗长的格式,因为我所做的一切都是内部和.NET,是否可以使用NetTcpBinding来减少一些开销?
这甚至可能吗?可取?
我正在开发一个WCF数据服务.当我尝试从客户端访问它时,我得到以下异常:
ObjectContext实例已被释放,不能再用于需要连接的操作.
码:
[WebGet]
public IQueryable<Student> GetUsersByClassId(string classId)
{
Check.Argument.IsNotEmptyOrNull(classId, "classId");
using (var db = new schoolContext(connectionString))
{
((IObjectContextAdapter)db).ObjectContext.ContextOptions.ProxyCreationEnabled = false;
((IObjectContextAdapter)db).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
var studentQry = from s in db.Student.Include("Class")
where s.Class.Id == classId
select s;
if(studentQry == null)
return new List<Student>().AsQueryable();
else
return studentQry;
}
Run Code Online (Sandbox Code Playgroud) c# wcf entity-framework exception-handling wcf-data-services
是否可以将oData与WCF服务应用程序一起使用但不能使用WCF数据服务?
如果有人能够更多地了解oData,那将会很棒.我已经在这个主题上做了一些谷歌搜索,但每当我搜索"wcf odata"时,我都会获得有关WCF数据服务的信息.
任何帮助/链接将不胜感激.
我有一个OData服务(使用实体框架的WCF数据服务).
所有这些服务都是选择数据.(没有写过.)
当我运行我的OData查询时,我偶尔会收到这样的错误:
事务(进程ID 95)在锁资源上与另一个进程死锁,并被选为死锁牺牲品.重新运行该交易
select语句可以成为死锁受害者吗?或者是实体框架试图锁定不应该锁定的东西?
如果它锁定在它不应该的位置,是否有办法告诉实体框架永远不会锁定?(对于这项服务,它总是永远是只读的.)
c# entity-framework entity-framework-4 wcf-data-services odata
WCF数据服务可以方便地通过URL中的选项查询和过滤数据.例如,假设我想要价格大于20的产品:
http://www.example.com/Service.svc/Products?$ filter =价格= 20
但是如何使用该$filter选项DateTime?说我想要本月修改过的所有产品.
http://www.example.com/Service.svc/Products?$ filter = ModifiedDate gt'2012-05-02'
这对我不起作用; 它给出了错误消息
运算符'gt'与位置13处的操作数类型'System.DateTime'和'System.String'不兼容.
我和其他比较运算符(ge,lt,le,eq)一样.到底是怎么回事?我该如何工作?我需要某种DateTime格式吗?我在上面尝试的内容似乎在此处记录.
我正在使用Windows运行时构建Windows应用商店应用.我正在访问使用基本身份验证的OData服务.我正在使用WCF数据服务工具用于Windows应用商店库(Microsoft.Data.Services.Client.WindowsStore).
身份验证字符串是自定义格式,所以我不能只使用NetworkCredential(username, password).我需要自己添加标题给我的每个请求DataServiceContext.
我尝试使用以下代码:
proxy.SendingRequest += (s, e) =>
{
e.RequestHeaders.Add("Authorization", authHeader);
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
'System.Net.WebHeaderCollection' does not contain a definition for 'Add' and no extension method 'Add' accepting a first argument of type 'System.Net.WebHeaderCollection' could be found
Run Code Online (Sandbox Code Playgroud) wcf-data-services odata windows-8 windows-runtime windows-store-apps
wcf ×5
odata ×4
c# ×2
linq ×2
.net ×1
asp.net ×1
asp.net-mvc ×1
lazy-loading ×1
mocking ×1
silverlight ×1
windows-8 ×1