我使用pocos创建了一个相当简单的域模型.我已经使用EntityTypeConfiguration
类将它们映射到EF DB上下文.一切正常.
我现在正在尝试使用a创建一个OData V4 WebAPI控制器端点ODataConventionModelBuilder
,这就是事情即将发生的地方.一切正常,直到它遇到一个非常规的关联.但我无法找到一种方法来ODataBuilder
从我的EntityTypeConfiguration
课程中获取映射.
这留下了2个令人不快的选择
用脏的属性装饰我可爱干净的pocos.
使用.手动重新映射所有非基于约定的映射 ODataBuilder
不确定代码示例是否会有所帮助,但无论如何,我已经简化了实体以简化.
var builder = new ODataConventionModelBuilder(); builder.EntitySet- ("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
Versions { get; set; } public virtual ICollection 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{ public ItemTagConfiguration() { HasKey(x => new {x.ItemId, x.Tag}); HasRequired(x => x.Item) .WithMany(y => y.Tags) .HasForeignKey(x => x.ItemId); } }
有没有人知道我可以使用EntityTypeConfiguration
ODataBuilder或Web API 使用这些文件的方法?
编辑
如果发现这个页面似乎表明它可能与我正在使用的EF 6.我想做的就是这个
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); modelBuilder.EntitySet("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属性.