从数据到实体框架展开导航属性"无法找到名为..的属性"
本文关键字:属性 导航 实体 数据 框架 | 更新日期: 2023-09-27 18:07:36
我在数据库上使用实体框架模型,并使用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();
会抛出一个异常:
无法在类型'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>
,并且名称与数据库中的外键约束名称匹配。
是什么导致这个不工作?当我检索没有Expand
的rmApplication
对象时,它具有计数为0的rmEnvironments
属性。
正如我们在注释中解决的问题一样,问题是表需要Ef的主键来生成适当的导航属性。