Ben*_*son 11 entity-framework odata asp.net-web-api
我使用pocos创建了一个相当简单的域模型.我已经使用EntityTypeConfiguration<TEnitityType>类将它们映射到EF DB上下文.一切正常.
我现在正在尝试使用a创建一个OData V4 WebAPI控制器端点ODataConventionModelBuilder,这就是事情即将发生的地方.一切正常,直到它遇到一个非常规的关联.但我无法找到一种方法来ODataBuilder从我的EntityTypeConfiguration<TEnitityType>课程中获取映射.
这留下了2个令人不快的选择
ODataBuilder不确定代码示例是否会有所帮助,但无论如何,我已经简化了实体以简化.
var builder = new ODataConventionModelBuilder();
            builder.EntitySet<Item>("Items");
            config.MapODataServiceRoute(
                routeName: "odata",
                routePrefix: "odata",
                model: builder.GetEdmModel(),
                batchHandler: new DefaultODataBatchHandler((GlobalConfiguration.DefaultServer)));
 public class Item
    {
        public Int32 Id { get; set; }
        public Int16 ItemTypeId { get; set; }                   
        public virtual ItemType Type { get; set; }
        public virtual ICollection<ItemVersion> Versions { get; set; }
        public virtual ICollection<ItemTag> Tags { get; set; }     
    }
遇到ItemTags集合时出现问题,这里是ItemTag:
public class ItemTag
    {
        public Int32 ItemId { get; set; }
        public string Tag { get; set; }
        public Item Item { get; set; }
    }
您可以看到的不是基于约定的,我有一个配置类,如下所示:
public class ItemTagConfiguration : EntityTypeConfiguration<ItemTag>
    {
        public ItemTagConfiguration()
        {
            HasKey(x => new {x.ItemId, x.Tag});
            HasRequired(x => x.Item)
                .WithMany(y => y.Tags)
                .HasForeignKey(x => x.ItemId);
        }
    }
有没有人知道我可以使用EntityTypeConfigurationODataBuilder或Web API 使用这些文件的方法?
编辑
如果发现这个页面似乎表明它可能与我正在使用的EF 6.我想做的就是这个
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Dbf>("Dbfs");
//            modelBuilder.Configurations.Add(new DbfMap());  <---- NO GOOD - Needs Class from DBContext we only have a model builder :(
Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);
但构建器没有Configurations属性.
两件事情:
我现在已经阅读了多个资料,反对使用延迟加载和序列化;这基本上就是 OData;(它甚至使用 system.runtime.serialization.datacontract 和 datamember 属性)
我在显式从上下文加载以及在 dbContext 的模型构建器中定义导航属性方面取得了更多成功。我知道您正在查看自定义导航属性,但我相当确定这些是对 ODataModelBuilder 类有用的重写方法(不需要太多假设,并且需要较少的实体框架才能工作)。在您已经提到使用 EF 的地方,我想这就是您将工作的方向,如果您不需要为模型名称添加别名,则可以使用约定命名为每个 Set 添加一个条目。
实体集(“路由前缀名称”)
在构建 EdmModel 时,它会连接您之前使用 Fluent 建立的关系。如果您确实必须向底层模型添加无关项,则应将每个类定义为 EntityType<>(),仅设置键。EdmBuilder 可以使用温和的属性和键关联来附加到 ODataConventionModelBuilder 中的 EF 模型。
我已经苦苦寻找了一段时间,似乎没有大量关于 .Net OData v4 的信息,可能是由于整个强制 datetimeoffset 问题。
希望能有所帮助
| 归档时间: | 
 | 
| 查看次数: | 2328 次 | 
| 最近记录: |