【问题标题】:OData to Entity Framework Expand on navigation property "Could not find a property named..."OData 到实体框架展开导航属性“找不到名为...的属性”
【发布时间】:2014-06-09 14:58:44
【问题描述】:

我在数据库上使用实体框架模型并使用 OData 通过 WCF 公开它。

我在我的数据库中添加了一个新表,以多对多关系将其他 2 个表相互链接。该表没有主键,只有 2 列是各个表的外键。

我重新生成了我的实体模型,并且这些类创建了导航属性:

public partial class rmApplication
{
    public rmApplication()
    {
        this.rmDeploymentRequests = new HashSet<rmDeploymentRequest>();
        this.rmEnvironments = new HashSet<rmEnvironment>();
    }

    public int ApplicationId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<rmDeploymentRequest> rmDeploymentRequests { get; set; }

    //This is the new navigation property
    public virtual ICollection<rmEnvironment> rmEnvironments { get; set; }
}

我还重新生成了我的服务引用,并且也可以在那里看到导航属性:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
    public global::System.Data.Services.Client.DataServiceCollection<rmEnvironment> rmEnvironments
    {
        get
        {
            return this._rmEnvironments;
        }
        set
        {
            this._rmEnvironments = value;
            this.OnPropertyChanged("rmEnvironments");
        }
    }

问题是当我通过 OData 检索 rmApplication 对象并尝试扩展导航属性时:

var app = context.rmApplications.Expand("rmEnvironments").Where(a => a.ApplicationId == applicationId).First();

它抛出一个异常说:

在类型“dbModel.rmApplication”上找不到名为“rmEnvironments”的属性

在 .edmx 中我可以看到关联存在:

      <AssociationSet Name="FK__rmApplica__Appli__2DDD7BCE" Association="dbModel.Store.FK__rmApplica__Appli__2DDD7BCE">
        <End Role="rmApplication" EntitySet="rmApplication" />
        <End Role="rmApplicationEnvironments" EntitySet="rmApplicationEnvironments" />
      </AssociationSet>
      <AssociationSet Name="FK__rmApplica__Envir__2ED1A007" Association="dbModel.Store.FK__rmApplica__Envir__2ED1A007">
        <End Role="rmEnvironment" EntitySet="rmEnvironment" />
        <End Role="rmApplicationEnvironments" EntitySet="rmApplicationEnvironments" />
      </AssociationSet>

并且名称与我数据库中的外键约束名称匹配。

什么可能导致这不起作用?当我检索一个没有ExpandrmApplication 对象时,它的rmEnvironments 属性计数为0。

【问题讨论】:

  • 我强烈建议所有表都有主键,尤其是如果你想使用 EF。
  • @EricScherrer 你认为这会导致问题吗?
  • 你的意思是我必须阅读整个问题?很好:)
  • 这可能会有所帮助,我确实看到您定义了关系,这些关系应该提供 EF 构建导航属性所需的提示。并且错误消息抱怨它找不到您已确认的属性。我现在很难过。
  • 你有想过这个吗?

标签: c# entity-framework wcf odata


【解决方案1】:

当我们在 cmets 中进行故障排除时,问题是表需要 Ef 的主键来生成适当的导航属性。

【讨论】:

  • 现在它显示“在 dbModel.rmApplication 上找不到属性 'rmApplication'”。另外,如果我这样做 .Expand("rmDeploymentRequests") (不同的导航属性)它可以工作
  • 我只是偶然发现了一个通用扩展,也许这会消除它的猜测:http://msdn.microsoft.com/en-us/library/hh541358(v=vs.113).aspx
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
相关资源
最近更新 更多