标签: wcf-data-services

WCF REST与ADO.NET数据服务

有人可以比较和对比WCF Rest服务与ADO.NET数据服务吗?有什么区别以及何时使用哪个?

谢谢,

射线.

编辑:感谢第一个答案,只是为了给我一些关于我要做的事情的背景:我有一个我计划放入云端的Web应用程序(有一天),DAL是用ADO.NET Entity Framework构建的.而且,我需要确定哪种Web服务数据访问技术最适合我的情况.

rest wcf wcf-data-services

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

为什么IE不解析从WCF数据服务返回的XML?

我目前正在运行IE8,并正在使用WCF数据服务进行一些测试.当我在浏览器中调用我的一个集合时,我得到了

"您正在查看包含经常更新内容的Feed ..."

消息并且不显示任何XML,因为它无法理解Atom内容元素.但是,我可以轻松地在Chrome中进行同样的RESTful调用,甚至可以使用Fiddler并查看repsonse就好了.

有什么理由IE无法解析从我的WCF数据服务返回的XML,或者设置我可以更改为直接查看它?我显然有解决方法所以这不是一个关键问题,但如果我必须使用IE来查看响应,它会有所帮助.

谢谢!

internet-explorer wcf-data-services

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

展开WCF数据服务(OData)的投影(选择)

假设我有一个看起来像这样的OData查询(我的实际查询要复杂得多):

Orders.Select(z => new { z.SubOrder.Addresses,
                         z.SubOrder.Cost,
                         z.SubOrder.SubOrderId, 
                         z.Sequence});
Run Code Online (Sandbox Code Playgroud)

这很好用.除了Address对象上有一个子对象(StateRef).由于StateRef在State表上进行查找,因此返回null.

为了说明,下面是地址对象Address的外观示例:

Address:
    string         Street 1
    string         Street 2
    StateRef       PrimaryState
    string         City
    // ... 42 other string attributes not shown ...
Run Code Online (Sandbox Code Playgroud)

StateRef对象上有国家的名字,但也有一些其他重要的国家性质(也许州鸟?)

所以,我想知道的是,我现在必须为z.SubOrder.Addresses创建一个"子投影",其中包含所有46个属性,以便我可以访问该PrimaryState项目吗?(我希望不是)

除了更多的编码方式,它还意味着我必须使用匿名类型.这使我的映射必须手动(而不是使用AutoMapper).

那么我想要的是一种在投影中"扩展"StateRef的方法?

像这样的东西:

Orders.Select(z => new { z.SubOrder.Addresses.Expand("PrimaryState"),
                         z.SubOrder.Cost,        ^
                         z.SubOrder.SubOrderId,  |
                         z.Sequence});           |
                                                 |
// This is not allowed by the compiler ----------+
Run Code Online (Sandbox Code Playgroud)

试试这个就会出现这个错误:

无效的匿名类型成员声明符.必须使用成员分配,简单名称或成员访问声明匿名类型成员.

更新: 这是一个示例查询来说明我的问题:

Users.Take(10).Select(x=>new { x.Id, x.Reputation, x.Comments})
Run Code Online (Sandbox Code Playgroud)

针对" data.stackexchange.com/stackoverflow/atom " 运行它.您将看到Comments有一个返回null的Post对象.

我需要它来返回它内部的值.

注意:我知道我可以手动将所有这些输入到"子"投影中.请阅读上面我不想要的原因.

.net c# exception wcf-data-services odata

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

在WCF数据服务应用程序中迁移EntityFramwork 6和VS 2013后无法更新或删除

迁移到EntityFramework和VS 2013后,我无法更新或删除资源.

Request URL:service.svc/Orders(22354)
Request Method:DELETE
Status Code:500 Internal Server Error
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Host:localhost
Origin:http://localhost
Proxy-Connection:keep-alive
Referer:orders.html
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)         Chrome/31.0.1650.57 Safari/537.36
X-Requested-With:XMLHttpRequest
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

   <?xml version="1.0" encoding="UTF-8"?>
   <m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
       <m:code />
       <m:message xml:lang="fr-FR">An error occurred while processing this request.</m:message>
       <m:innererror>
           <m:message>Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure "System.Data.Services.resources" was correctly embedded or linked into assembly "Microsoft.OData.EntityFrameworkProvider" at compile …
Run Code Online (Sandbox Code Playgroud)

c# wcf entity-framework wcf-data-services

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

实体框架 - 当父记录已存在时,在子表中插入记录

下午好-

我正在使用LINQ to Entity Framework为数据访问层开发Silverlight应用程序.我的n层数据库模型包括大约30个左右的表,其中包含许多多层次的父子关系.最近开始编写我的数据服务和单元测试,并发现在已经定义父表记录时将新记录插入子表的问题.这是我的父表和子表的删节版本:

父母表:

用户
    UserID(PK)
    电子邮件
    密码
    等...

儿童桌:

UserProfiles
    UserProfileID(PK)
    各种个人资料信息...
    用户ID(FK - 用户表)

所以在这一点上,我已经使用Entity Framework为ORM创建了各种类,我希望为我的实体上的CRUD操作创建数据服务.以下是我的方法插入新用户(没有父表引用)的示例代码:

    public User CreateUser(User newUser)
    {
        using (var _context = new ProjectDatabase())
        {
            newUser.CreatedDate = DateTime.Now;
            newUser.ModifiedDate = DateTime.Now;
            _context.AddToUsers(newUser);
            _context.SaveChanges();
        }

        return newUser;
    }
Run Code Online (Sandbox Code Playgroud)

这很好用.我已经为它编写了单元测试,没问题.另一方面,现在考虑我编写的以下数据服务方法,以将新的UserProfile对象插入数据库.首先,我有一个非常相似的数据服务:

    public UserProfile CreateProfile(UserProfile newUserProfile)
    {
        using (var _context = new ProjectDatabase())
        {
            newUserProfile.CreatedDate = DateTime.Now;
            newUserProfile.ModifiedDate = DateTime.Now;
            _context.AddToUserProfiles(newUserProfile);
            _context.SaveChanges();
        }

        return newUserProfile;
    }
Run Code Online (Sandbox Code Playgroud)

这个代码就像其他代码一样编译没有问题.但是,我的单元测试始终失败.这是我的单元测试的代码:

    [TestMethod]
    public void UserProfileCrudTest()
    {
        IProfileDataService …
Run Code Online (Sandbox Code Playgroud)

parent-child entity-framework-4 wcf-data-services

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

ADO.NET库可以从.csv文件快速批量插入数据库?

我想知道您是否可以推荐任何高级ADO.NET库来处理数据库.

我发现LINQ-to-Entities非常适合从数据库中提取数据,但对于将数据插入数据库完全没有用.它缺少功能,如快速批量插入,重复删除,以及您可以使用纯SQL实现的大多数高级功能.

那么:你能推荐一些ADO.NET库来提供LINQ-to-Entities所缺少的各种高级功能吗?

sql sql-server ado.net linq-to-entities wcf-data-services

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

OData,Atom,Json和WCF数据服务之间有什么关系

最近我在学习WCF数据服务.我知道数据服务公开了数据为静态资源,可以通过URL进行操作.但是这个领域有很多技术.希望有人能帮助我理解这些.谢谢

wcf-data-services

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

升级到EF 6(RTM) - 获取System.Data.Entity.Core.Objects.ObjectContext不能用于返回类型System.Data.Objects

刚刚升级了.NET 4.5 WCF服务,该服务还有一个使用EF 6的OData服务.OData服务当然在升级之前工作.现在,当尝试查询OData服务或甚至只是从Visual Studio 2012浏览它时,我收到以下请求错误:

服务器遇到处理请求的错误.异常消息是'表达式类型'System.Data.Entity.Core.Objects.ObjectContext'不能用于返回类型'System.Data.Objects.ObjectContext''.请参阅服务器日志以获取更多详

异常堆栈跟踪是:

at System.Linq.Expressions.Expression.ValidateLambdaArgs(Type delegateType, Expression& body, ReadOnlyCollection`1 parameters)
at System.Linq.Expressions.Expression.Lambda[TDelegate](Expression body, String name, Boolean tailCall, IEnumerable`1 parameters)
at System.Data.Services.Providers.DbContextHelper.CreateDbContextAccessor(Type type)
at System.Data.Services.Providers.DbContextHelper.GetDbContextAccessor(Type type)
at System.Data.Services.DataService`1.CreateMetadataAndQueryProviders(IDataServiceMetadataProvider& metadataProviderInstance, IDataServiceQueryProvider& queryProviderInstance, Object& dataSourceInstance, Boolean& isInternallyCreatedProvider)
at System.Data.Services.DataService`1.CreateProvider()
at System.Data.Services.DataService`1.HandleRequest()
at System.Data.Services.DataService`1.ProcessRequestForMessage(Stream messageBody)
at SyncInvokeProcessRequestForMessage(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc) …
Run Code Online (Sandbox Code Playgroud)

entity-framework wcf-data-services odata

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

在ADO.Net Data Services中使用.SaveChanges()方法的最佳方法是什么?

有没有人对.SaveChanges()方法的使用有一些很好的信息?

尝试在我的数据上下文对象上使用.SaveChanges()方法时遇到各种问题.我从现有数据源获取数据,创建适当的EntityFramework/DataService对象,用数据填充这些创建的对象,将这些对象添加到上下文,然后通过调用.SaveChanges保存该数据.

我提出的场景(以及与它们相关的问题)就是这样......在每个场景中,我都有一个foreach循环,它从DataTable中的行获取数据并生成对象,将它们作为上下文附加到上下文中他们去.(注意:三个对象是"成员"和两个通过SetLink调用连接的"地址") - 基本上这是一个转换工具,用于从一个数据存储中获取数据并将其按压到数据服务公开的数据存储中.

  • 在foreach循环结束时调用.SaveChanges(),不带任何参数(即在循环外部)
    • OutOfMemory错误约1/3(90,000次保存中有30,000次) - 不确定如何发生这种情况,因为每个保存项目都是对数据库的单独SQL调用,内存耗尽的是什么?
  • 每个循环调用.SaveChanges(),不带任何参数
    • 这是有效的,但绝对是绝对的(90,000次保存需要8小时)
  • 在foreach循环结束时调用.SaveChanges(SaveChangesOption.Batch)一次
    • 相同的OutOfMemory错误,但没有任何保存到数据库
  • 每个循环调用一次.SaveChanges(SaveChangesOption.Batch)
    • 404未找到错误
  • 每10个循环调用一次.SaveChanges(SaveChangesOption.Batch)
    • 400错误请求错误(偶尔)
    • OutOfMemory经过多次改动
  • 许多随机尝试每个循环创建一次上下文,或者在循环开始时将其作为变量或将其作为可用的私有成员变量.
    • 不同的结果,无法量化,没有真正那么好

在执行像这样的大数据加载时,从客户端对象调用.SaveChanges()的首选方法是什么?有什么我不知道如何.SaveChanges()的工作原理?任何人都可以提供有关如何使用此功能以及通过数据服务保存数据的限制(如果有)的更多详细信息?围绕.SaveChanges()方法调用是否有任何最佳实践?是否有关于.SaveChanges()方法调用的特别好的文档?

entity-framework savechanges wcf-data-services

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

WCF数据服务,从Entity Framework部分类序列化其他属性

我正在创建API的过程与Hanselman显示可以为Stackoverflow完成的方式大致相同.我有一堆EntityObject实体框架生成的类和一个DataService将它们序列化为Atom和JSON的东西.我想通过Web服务公开一些生成的属性.将FullName视为通过连接First-和LastName生成的(但有些更复杂).我已将这些添加到扩展Entity Framework EntityObject的部分类中,并为它们提供[DataMember]属性,但它们不会显示在服务中.这是一个示例属性(set为了好的措施而抛出,没有它也不起作用):

[DataMember]
public string FullName
{
    get
    {
        return (this.FirstName ?? "") + " " + (this.LastName ?? "");
    }
    set { }
}
Run Code Online (Sandbox Code Playgroud)

根据MSDN论坛上的这些 讨论,这是一个已知问题.有没有人找到好的解决方法或有没有人有替代方案的建议?

c# wcf entity-framework wcf-data-services

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