我试图在Asp.Net元数据中导出OData标识类。现在,IdentityUserLogin类包含三个没有用[Key]属性标记的主键。生成元数据时,输出中缺少键定义。
<EntityType Name="IdentityUserLogin">
<Property Name="LoginProvider" Type="Edm.String"/>
<Property Name="ProviderKey" Type="Edm.String"/>
<Property Name="UserId" Type="Edm.String"/>
</EntityType>通常,要修复这个问题,我所需要做的就是使用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类也会发生这种情况。
发布于 2015-05-29 21:42:55
有一种方法可以避免提到的这里和这里错误,如果一个人派生身份类型--例如,为了有不同类型的密钥。因为我派生出所有标识类型并且相关属性是虚拟的,所以我能够覆盖键属性--一组键属性。因此,我不需要显式地定义键,因此可以避免重复的属性错误。
public class UserLogin : MultitenantIdentityUserLogin<Guid, Guid>
{
[Key]
public override Guid TenantId
{
get { return base.TenantId; }
set { base.TenantId = value; }
}
[Key]
public override string LoginProvider
{
get { return base.LoginProvider; }
set { base.LoginProvider = value; }
}
[Key]
public override string ProviderKey
{
get { return base.ProviderKey; }
set { base.ProviderKey = value; }
}
[Key]
public override Guid UserId
{
get { return base.UserId; }
set { base.UserId = value; }
}
}
public class UserRole : IdentityUserRole<Guid>
{
[Key]
public override Guid UserId
{
get { return base.UserId; }
set { base.UserId = value; }
}
[Key]
public override Guid RoleId
{
get { return base.RoleId; }
set { base.RoleId = value; }
}
}
public class UserClaim : IdentityUserClaim<Guid>
{
[Key]
public override int Id
{
get { return base.Id; }
set { base.Id = value; }
}
}你好,卡西米尔·布奇切克
发布于 2015-05-27 03:17:05
您需要显式地配置模型,因此您应该使用ODataModelBuilder而不是ODataConventinalModelBuilder,并且不会有重复的属性。
https://stackoverflow.com/questions/30316344
复制相似问题