OData到实体框架在导航属性上展开“无法找到名为...的属性”

时间:2014-06-09 14:58:44

标签: c# entity-framework wcf odata

我在数据库上使用Entity Framework模型,并使用OData在WCF上公开它。

我在我的数据库中添加了一个新表,在另外两个表之间以多对多关系链接。表没有主键,只有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();

它抛出一个例外说:

  

无法找到名为&#39; rmEnvironments&#39; on type&#39; dbModel.rmApplication

在.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>

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

什么可能导致这不起作用?当我在没有rmApplication的情况下检索Expand对象时,它具有计数为0的rmEnvironments属性。

1 个答案:

答案 0 :(得分:0)

正如我们在评论中进行了排查,问题是该表需要Ef的主键来生成适当的导航属性。