我已經使用pocos創建了一個相當簡單的域模型。我已經使用EntityTypeConfiguration<TEnitityType>
類將這些映射到EF DB上下文。這一切工作正常。如何獲得Web API odatamodelbuilder以使用EF流利API映射
我現在正在嘗試使用ODataConventionModelBuilder
創建一個OData V4 WebAPI控制器端點,而這正是情況正在惡化的地方。它一切正常,直到遇到不是基於約定的關聯。但我找不到一種方法讓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);
}
}
有誰知道一種方法,我可以使用這些EntityTypeConfiguration
文件與ODataBuilder或Web API?
編輯
如果發現this page這似乎表明有可能與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);
但構建器沒有配置屬性。
Fanstatic!做了一些更多的谷歌搜索和「OData的網頁API流利的數據映射」排名靠前的搜索結果現在會這樣的問題。 –
你有沒有想過這個?我正在爲完全相同的事情而哭泣。 –