【问题标题】:WCF RIA Services & Windows Azure => Entity has no key definedWCF RIA 服务和 Windows Azure => 实体没有定义键
【发布时间】:2011-08-26 08:25:21
【问题描述】:

背景信息

在使用 Windows Azure 和 WCF RIA 服务进行开发时,我看到了很多随机错误和令人沮丧的情况,但这个确实是巅峰。

我有一个具有以下架构的应用程序:2 个 Web 角色(MVC3 和带有 Silverlight RIA 的 ASP.NET)=> 业务层 => 数据层(外部服务/表存储/SQL Azure)。 ASP.NET 服务(配置文件/角色/会话)存储在表存储中。

由于最近的需求变化,需要添加一个移动网站。我想为两个 GUI 项目共享(服务器端)ViewModel。举例说明:

我的问题

当我的项目托管在 Windows Azure 环境中时,我现在遇到了可怕的“未找到”异常。使用提琴手,我发现它返回了以下异常:

DomainService 'XXService' 中的实体 'XXModel' 没有 定义了一个键。 DomainService 操作公开的实体类型 必须至少有一个标有 KeyAttribute 的公共属性。

奇怪的是,这个东西在本地 Azure 开发环境中可以完美运行,但是上传到云端时就不行了。我认为这个错误与 ViewModel 现在位于与 RIA 服务不同的程序集中有关,但为什么它会在本地而不是远程工作?

如果有人需要任何补充信息,我很乐意回答您的问题。

【问题讨论】:

  • 您还在正确地对所有部分进行 bin 部署吗? RIA、Azure SDK 和您的程序集都需要它。
  • 是的,所有的程序集都在部署中,以前在同一个项目上工作过。
  • 您是否在开发环境的干净目录中重新构建了项目?我想知道您是否有一些来自先前构建的工件掩盖了问题。这不会解决您的问题,但可以解释开发与部署之间的差异。
  • @Paul Keister 我试过这个,但无济于事:(
  • 很抱歉在此浪费您的时间。我在想,由于 RIA 服务依赖于“投影”代码,因此代码生成输出可能在本地不同步。显然这不是问题。

标签: .net c#-4.0 azure wcf-ria-services


【解决方案1】:

我已经解决了这个问题。似乎 RIA 服务,仅当托管在 Windows Azure 中时,似乎无法从另一个程序集中定义的模型类中获取属性,而不是托管服务的程序集。

【讨论】:

    【解决方案2】:

    您的实体是否具有标有 [Key] 属性的属性?例如:

    public class WidgetDef
    {
        [Key]
        public int WidgetId { get; set; }
    
        public string Title { get; set; }
    }
    

    这对于与 RIA DomainServices 一起使用的类型是必需的 - 如您问题中的错误消息中所述。

    虽然我不知道为什么它会在开发环境中运行,而不是在真实环境中运行。

    【讨论】:

    • 是的,它已经运行了几个月了。它与发布到云和将实体移动到不同项目的组合有关..
    • 那我想我帮不了你。但是感谢您发布这个问题,因为我们正在考虑将来将我们的 ASP.NET / RIAServices 项目移植到 Azure。
    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 2012-02-25
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多