DbDomainService <t>不生成代理实体</t>

时间:2012-05-02 04:55:08

标签: wcf entity-framework ef-code-first ria code-first

我在几台计算机上的visual studio 2010和11 beta都尝试了这个。我还使用了EF 4.3和5.0 - beta 2.我正在尝试使用Silverlight 5中的代码优先方法。

我创建了一个DbDomainService并为它创建了CRUD操作,但在客户端没有创建任何代理实体。我在WCF类库中执行此操作。以下是它的创建方法:我将一个项目添加到解决方案(WCF RIA Services类库)。客户端和服务端项目会自动添加并通过RIA链接进行链接。我创建了我的实体和dbcontext(参见下面的源代码)。我创建了我的域服务类(向导只显示了一半的时间,非常错误)并确保有CRUD操作。我重建,并在客户端项目上显示所有文件,并且没有生成代码。如果我将DomianService类更改为继承自DomainService而不是DbDomainService,那么我的代理实体将按照预期在客户端生成。

构建解决方案时出现以下警告:

警告1创建MEF组合容器时发生以下异常:  无法加载一个或多个请求的类型。检索LoaderExceptions属性以获取更多信息。  将使用默认代码生成器。 AProgram.Client.RIAServices

请帮助:)

    namespace AProgram.Server.RIAServices.Models.Sales
    {

       public class Customer
       {
          [Key]
          public int CustomerID { get; set; }

          [Required]
          [MaxLength(50)]
          public string CustomerName { get; set; }
       }

    }

    namespace AProgram.Server.RIAServices
    {
       public class SalesDbContext : DbContext
       {
          public DbSet<Customer> Customers { get; set; }
       }
    }

    namespace AProgram.Server.RIAServices
    {
       using System;
       using System.Collections.Generic;
       using System.ComponentModel;
       using System.ComponentModel.DataAnnotations;
   using System.Linq;
   using System.ServiceModel.DomainServices.Hosting;
   using System.ServiceModel.DomainServices.Server;


   // TODO: Create methods containing your application logic.
   [EnableClientAccess()]
   public class SalesDomainService : DbDomainService<SalesDbContext>
   {
      [Query(IsComposible=false)]
      public Customer GetCustomer(int id)
      {
         return this.DbContext.Customers.Find(id);
      }
   }
}

2 个答案:

答案 0 :(得分:6)

我找到了一个好奇的人的答案。 Ria Services似乎只与EF 4.1兼容。我在代码项目文章中找到了一个解决方法:

<runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="EntityFramework" 
           publicKeyToken="b77a5c561934e089" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
       </dependentAssembly>
     </assemblyBinding>
 </runtime>

只需将其添加到Web.config文件中,或者如果使用Ria Services类库,则将其添加到app.config并将app.config重命名为web.config。

以下是该文章的链接:Code project Article

答案 1 :(得分:0)

我也遇到了RIA和EF的问题,而我的治疗方法是使用NuGetPackage RIAServices.EntityFramework。问题是,RIA服务仅支持某些版本的EF。目前看起来它只支持&lt; = 4.1。