Entity framework “如何修复”;不支持类型为基元集合或复杂类型的属性";使用EF-DbContext?
我有一个包含POCO实体的项目。已经使用EntityFramework4.2和CodeFirst为其创建了数据库上下文。这很好,但是上下文需要作为OData服务公开,而OData服务不起作用 浏览OData服务时出现以下错误: 类型上的属性“DataSubmissionItems” “Lifecycle.ProgramReportSubmission.Model.ProgramReportSubmission”是 不是有效的属性。类型为的集合的属性 不支持基本类型或复杂类型 数据服务类类似于:Entity framework “如何修复”;不支持类型为基元集合或复杂类型的属性";使用EF-DbContext?,entity-framework,wcf-data-services,Entity Framework,Wcf Data Services,我有一个包含POCO实体的项目。已经使用EntityFramework4.2和CodeFirst为其创建了数据库上下文。这很好,但是上下文需要作为OData服务公开,而OData服务不起作用 浏览OData服务时出现以下错误: 类型上的属性“DataSubmissionItems” “Lifecycle.ProgramReportSubmission.Model.ProgramReportSubmission”是 不是有效的属性。类型为的集合的属性 不支持基本类型或复杂类型 数据服务类类似于:
public class ExceptionReportDataService : DataService<ExceptionReportEntitiesContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
config.UseVerboseErrors = true;
}
}
public class ExceptionReportEntitiesContext : DbContext
{
public DbSet<ExceptionReport> ExceptionReports { get; set; }
public ExceptionReportEntitiesContext()
: base(DynamicConfig.GetAppSettingValue("DB_CONN_STRING_LIFECYCLE"))
{
}
}
公共类例外ReportDataService:DataService
{
//此方法只调用一次以初始化服务范围策略。
公共静态void InitializeService(DataServiceConfiguration配置)
{
config.SetEntitySetAccessRule(“*”,EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion=DataServiceProtocolVersion.V2;
config.UseVerboseErrors=true;
}
}
EF上下文类类似于:
public class ExceptionReportDataService : DataService<ExceptionReportEntitiesContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
config.UseVerboseErrors = true;
}
}
public class ExceptionReportEntitiesContext : DbContext
{
public DbSet<ExceptionReport> ExceptionReports { get; set; }
public ExceptionReportEntitiesContext()
: base(DynamicConfig.GetAppSettingValue("DB_CONN_STRING_LIFECYCLE"))
{
}
}
公共类例外ReportEntityContext:DbContext
{
公共数据库集例外报告{get;set;}
公共例外报告实体上下文()
:base(DynamicConfig.GetAppSettingValue(“DB\u连接\u字符串\u生命周期”))
{
}
}
POCO实体看起来像:
namespace WBRT.ProgramData.Lifecycle.ExceptionReportModel
{
public class ExceptionReport
{
public virtual Guid ExceptionReportID { get; set; }
public virtual Lifecycle.ProgramReportSubmission.Model.ProgramReportSubmission ReportSubmission { get; set; }
}
}
namespace Lifecycle.ProgramReportSubmission.Model
{
public class ProgramReportSubmission
{
public Guid ProgramReportSubmissionId { get; set; }
public virtual ICollection<DataSubmissionItem> DataSubmissionItems { get; set; }
}
public class DataSubmissionItem
{
public Guid DataSubmissionItemId { get; set; }
}
}
命名空间WBRT.ProgramData.Lifecycle.ExceptionReportModel
{
公共类例外报告
{
公共虚拟Guid例外报告ID{get;set;}
公共虚拟生命周期.ProgramReportSubmission.Model.ProgramReportSubmission报告提交{get;set;}
}
}
命名空间Lifecycle.ProgramReportSubmission.Model
{
公开课程报告提交
{
公共Guid ProgramReportSubmissionId{get;set;}
公共虚拟ICollection DataSubmissionItems{get;set;}
}
公共类数据子任务
{
公共Guid DataSubMid{get;set;}
}
}
我所尝试的:
- 在DataSubmissionItem类上设置
DataServiceKey
- 在ExceptionReportEntitiesContext构造函数和数据服务中将
设置为falseProxyCreationEnabled
- 重写模型创建上的
并删除IncludeMetadata约定
- 重写建模时的
和设置
modelBuilder.Entity().Ignore(prs=>prs.DataSubmissionItems)代码>
有人知道如何解决此错误吗?WCF DS的RTM版本不支持此类属性。但最新的CTP确实 另一方面,您得到这样一个错误的事实可能意味着WCF DS无法将提供程序识别为EF,并且istead将其作为反射提供程序使用。所以即使是最新的CTP也不能真正解决这个问题
WCF DS当前仅在数据服务中的T为ObjectContext或派生类型时识别EF提供程序。EF代码的典型解决方法是首先将服务定义为DataService,然后覆盖其上的CreateDataSource方法,并从DbContext返回ObjectContext实现。请参阅这篇关于如何做到这一点的文章(关于EF4.1,但我认为同样的内容也适用于4.2):。您可以跳到有关WCF DS的部分。Super!如果该属性是集合,则可以对其进行更改(我将尝试将其更改为HashSet)。我不确定CTP是否是一种选择——我认为它没有“上线”许可证。但是如果你解决了EF提供者的问题,它可能在没有CTP的情况下工作。尝试过,但没有运气。没关系,我们现在将回到使用EDMX。我相信当.NET4.5发布时,你会很高兴的!