标签: wcf-data-services

在LINQ to ADO.net数据服务查询中使用Expand有哪些替代方法?

我想知道在执行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)

linq entity-framework lazy-loading wcf-data-services

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

模拟DataServiceQuery <TElement>

我如何模拟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)

asp.net-mvc mocking wcf-data-services

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

Ria Services与WCF Dataservices

我的团队正在评估更大的商业门户网站.(发票,簿记,工资.....)

我们都习惯使用DDD,O/R映射器和NHibernate作为我们的首选.我们选择使用CompositeWPF来保持业务门户中所有模块和部件系统之间的模块化.

现在我们已经对Ria Services进行了评估,并且对于它如何以面向数据的方式工作感到失望,面向数据的方面可以很好地面向服务的方案,但我们觉得我们可以采用面向对象的方法,我们觉得我们可以使用OO方法获得比DO方法更低复杂度的应用程序.例如,它不允许值对象,多对多关系,一切都需要有键等等.

我们还没有看过WCF数据服务,所以我们的问题是WCF数据服务我们的回答?它是否与Silverlight 4很好地集成?我们能否以OO方式使用它?

silverlight wcf wcf-data-services wcf-ria-services

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

构建'flat'而不是'tree'LINQ表达式

我使用一些代码(可在这里对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)

如何修改表达式构建代码来执行此操作?

.net linq wcf-data-services

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

你可以在NetTcpBinding中使用WCF数据服务(ne OData,ne Astoria,ne ADO.NET Data Service)吗?

我正在寻找通过慢速卫星连接创建数据查询WCF服务,我真的很喜欢WCF数据服务.我看到的问题是HTTP是一种非常冗长的格式,因为我所做的一切都是内部和.NET,是否可以使用NetTcpBinding来减少一些开销?

这甚至可能吗?可取?

wcf nettcpbinding wcf-data-services odata

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

ObjectContext实例已被释放,不能再用于需要连接的操作

我正在开发一个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

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

将数据从WCF服务公开为oData

是否可以将oData与WCF服务应用程序一起使用但不能使用WCF数据服务?

如果有人能够更多地了解oData,那将会很棒.我已经在这个主题上做了一些谷歌搜索,但每当我搜索"wcf odata"时,我都会获得有关WCF数据服务的信息.

任何帮助/链接将不胜感激.

wcf wcf-data-services odata

5
推荐指数
2
解决办法
5384
查看次数

只读声明中的实体框架死锁受害者

我有一个OData服务(使用实体框架的WCF数据服务).

所有这些服务都是选择数据.(没有写过.)

当我运行我的OData查询时,我偶尔会收到这样的错误:

事务(进程ID 95)在锁资源上与另一个进程死锁,并被选为死锁牺牲品.重新运行该交易

select语句可以成为死锁受害者吗?或者是实体框架试图锁定不应该锁定的东西?

如果它锁定在它不应该的位置,是否有办法告诉实体框架永远不会锁定?(对于这项服务,它总是永远是只读的.)

c# entity-framework entity-framework-4 wcf-data-services odata

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

$ WCF数据服务查询URL中的DateTime的$ filter选项

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格式吗?我在上面尝试的内容似乎在此处记录.

asp.net wcf wcf-data-services

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

如何将自定义授权标头添加到Windows应用商店OData客户端?

我正在使用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

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