Я пытаюсь экспортировать классы Identity Asp.Net в метаданные OData. Теперь класс IdentityUserLogin
содержит три первичных ключа, которые не отмечены атрибутом [Key]
. Когда метаданные генерируется, ключ определение отсутствует в выводеПовторяющиеся столбцы в метаданных odata
<EntityType Name="IdentityUserLogin">
<Property Name="LoginProvider" Type="Edm.String"/>
<Property Name="ProviderKey" Type="Edm.String"/>
<Property Name="UserId" Type="Edm.String"/>
</EntityType>
Обычно, чтобы исправить это все, что мне нужно сделать, это добавить ключи manully используя HasKey
метод как так
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<IdentityUserLogin>("Logins").EntityType
.HasKey(l => new { l.LoginProvider, l.ProviderKey, l.UserId });
var EDM = builder.GetEdmModel();
config.Routes.MapODataServiceRoute("odata", "api", EDM,
new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
в то время как выше генерирует определение ключа для объекта, он также создает повторяющиеся столбцы
<EntityType Name="IdentityUserLogin">
<Key>
<PropertyRef Name="LoginProvider"/>
<PropertyRef Name="ProviderKey"/>
<PropertyRef Name="UserId"/>
</Key>
<Property Name="LoginProvider" Type="Edm.String" Nullable="false"/>
<Property Name="ProviderKey" Type="Edm.String" Nullable="false"/>
<Property Name="UserId" Type="Edm.String" Nullable="false"/>
<Property Name="LoginProvider" Type="Edm.String"/>
<Property Name="ProviderKey" Type="Edm.String"/>
<Property Name="UserId" Type="Edm.String"/>
</EntityType>
Я делаю что-то неправильно здесь? Обратите внимание, что это также происходит с классом IdentityUserRole
.
Он работает, но теперь мне нужно, чтобы построить всю свою модель с ключами, отношений и валидаций вручную. Он работает, если вам нужно много контролировать свою экспортированную модель, но для этой ситуации это означает двойную работу, поскольку метаданные уже определены в модели. – Ayman
Обычно мы не рекомендуем использовать 'ODataConventionModelBuilder' и настраивать модель вместе, но то, что вы хотите достичь, является правильным сценарием, и это [ошибка] (https://github.com/OData/WebApi/issues/ 217), что существуют повторяющиеся свойства, но это исправление ошибки является нарушением изменений для OData WebAPI, вы можете следить за этой ошибкой, и запрос на передачу оценивается :) –