我想让我的webapi和实体框架一起工作,但当我尝试查询使用自定义枚举的某个实体时,似乎卡住了。Breeze EdmBuilder自定义枚举序列化错误
我使用微风EDMbuilder来为我的元数据生成edm模型。
我的配置:
config.Routes.MapODataServiceRoute(
routeName: "odata",
routePrefix: "odata",
model: EdmBuilder.GetEdm<Base.DAL.Entities.DbContextFixForEdm>(),
batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer)
);
的元数据生成的,如果我查询的OData/$元,我看到我所有的实体及其属性。
现在我面临的问题如下。
我有一个名为ApiUserEntity具有以下属性的一个非常基本的实体:
public class ApiUserEntity : BaseEntity
{
public string Username { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public string Salt { get; set; }
public ApiUserRole Role { get; set; }
public ApiPermission Permission { get; set; }
}
和一个简单的Odatacontroller获取函数返回ApiUserEntities的一个IQueryable:每当我查询这个
// GET: odata/ApiUsers
[EnableQuery]
public IQueryable<ApiUserEntity> GetApiUsers(ODataQueryOptions<ApiUserEntity> opts)
{
return _userService.GetUsers();
}
然而方法我总是得到以下错误:
'Base.DAL.Entities.ApiUserRole' cannot be serialized using the ODataMediaTypeFormatter.
这个错误不只是当我用微风查询它,而且当我从我的浏览器访问该方法时。
在元数据文件生成的apiuserentity看起来是这样的:
<EntityType xmlns:p5="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" Name="ApiUserEntity" p5:ClrType="Base.DAL.Entities.ApiUserEntity, Base.DAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property xmlns:p7="http://schemas.microsoft.com/ado/2009/02/edm/annotation" Name="Id" Type="Edm.Int32" Nullable="false" p7:StoreGeneratedPattern="Identity"/>
<Property Name="Username" Type="Edm.String" Nullable="false" MaxLength="255" FixedLength="false" Unicode="true"/>
<Property Name="Password" Type="Edm.String" Nullable="false" MaxLength="300" FixedLength="false" Unicode="true"/>
<Property Name="Email" Type="Edm.String" Nullable="false" MaxLength="255" FixedLength="false" Unicode="true"/>
<Property Name="Salt" Type="Edm.String" MaxLength="255" FixedLength="false" Unicode="true"/>
<Property Name="Role" Type="Base.DAL.Entities.ApiUserRole" Nullable="false"/>
<Property Name="Permission" Type="Base.DAL.Entities.ApiPermission" Nullable="false"/>
<Property Name="CreatedAt" Type="Edm.DateTime"/>
<NavigationProperty Name="Domains" Relationship="Base.DAL.Entities.DomainEntity_Users" ToRole="DomainEntity_Users_Source" FromRole="DomainEntity_Users_Target"/>
</EntityType>
我注意到最主要的是,它被添加EDM前缀常见类型,如字符串和日期时间。但我的自定义枚举只是他们的全名空间。当我将自定义枚举的属性更改为int时,它会给我返回的结果,但我真的想要使用这些枚举并将它们转换为整数将不是解决方案。
我正在寻找它不能找到类型,并不知道如何解析它,但这只是geussing。除此之外,我不知道如何解决它或我应该从这里走。在过去的几个小时里,我一直没有结果地抨击我的头脑。
我遇到了完全相同的问题。你有没有找到解决方案? – 2015-02-19 04:29:30