1
  1. 我正在尝试使用以下体系结构的Silverlight MVVM(使用MEF)应用程序:我有一个n层的Silverlight解决方案。其中一个项目是一个包含我的实体数据模型对象的.NET项目。我们称这个项目为MySqlData实体框架生成的代码链接Silverlight项目不包括功能导入

  2. 我成功地从现有数据库生成代码。

  3. 从MySQLData EDMX模型浏览器,我添加一个存储过程使用一个函数导入,也创建一个复杂的类型。

  4. 我添加代码生成项目到项目,并最终与MySqlData.tt和MySqlData.Context.tt

  5. 我的新功能导入和复合型成功出现在MySqlData.tt和MySqlData.Context.tt (我很高兴!)

  6. 我还将WCF RIA域服务类添加到MySqlData项目,因为我正在使用Silverlight应用程序。

  7. 在相同的解决方案下,我转到名为MyInfrastructure的Silverlight项目,然后单击属性。在Silverlight构建选项下的WCF RIA Service Link选项中,我选择我的MySqlData项目。

  8. 当我构建MyInfrastructure项目时,可以看到生成的类MySqlData.g.cs。

  9. 现在,这里的问题(感谢您的耐心):生成的代码MySqlData.g.cs没有我的新功能导入,并在MySqlData项目中创建新的复杂类型的任何引用。事实上,域服务类没有显示任何对新复杂类型的引用,因此它不会生成MyInfrastructure项目的预期代码。我尝试了除复杂类型之外的其他东西,比如说一个只返回一个字符串的存储过程。仍然没有好处。我也尝试创建一个部分的DomainService类,并没有很好的结果。

  10. 我能做些什么来强制导入等功能,以显示在另一个项目中生成的代码。我希望不必采取手动干预来使这些事情发生,否则每次通过自定义工具重新生成代码时,我都必须手动执行某些操作。

我使用Visual Studio 2010和Entity Framework 4.3.1

谢谢您的帮助。

+0

我发现了我的问题的解决方案: – user1309226

回答

0

我找到了解决我的问题:

首先,它是没有必要使用模板文本,因为在创建生成的代码在这里产生.TT文件,当我创建Silverlight的类的WCF RIA服务参考图书馆。在我的例子中,它被称为MyInfrastructure。

为了保证生成的代码显示我的新的存储过程和复杂类型我创造,我不得不创建一个局部域服务类,内容如下:

namespace MySqlData 
{ 
    using System.ComponentModel.DataAnnotations; 
    using System.Linq; 
    using System.ServiceModel.DomainServices.EntityFramework; 


    public partial class MySqlDataDomainService : LinqToEntitiesDomainService<MySqlDataEntities> 
    { 

     [System.ServiceModel.DomainServices.Server.Query] 
     public IQueryable<JournalViewItem> GetJournalViewItems() 
     { 
      return this.ObjectContext.GetJournalViewItems().AsQueryable(); 
     } 

    } 

    [MetadataType(typeof(JournalViewItemMetadata))] 
    public partial class JournalViewItem 
    { 

     internal sealed class JournalViewItemMetadata 
     { 
      public JournalViewItemMetadata() { } 

      [Key] 
      public int JournalItemId { get; set; } 
     } 
    } 


} 

有报道说,帮我两个重要的事情:

我不得不这样注释添加到函数导入:

[System.ServiceModel.DomainServices.Server.Query] 

我还必须在下面的代码解决与错误想念g密钥与JournalViewItem复杂类型:

[MetadataType(typeof(JournalViewItemMetadata))] 
    public partial class JournalViewItem 
    { 

     internal sealed class JournalViewItemMetadata 
     { 
      public JournalViewItemMetadata() { } 

      [Key] 
      public int JournalItemId { get; set; } 
     } 
    } 

我希望这可以帮助某人。