Entity framework mapping enum : The specified value is not an instance of type 'Edm.Int32' Parameter name: value

ぃ、小莉子 提交于 2019-12-22 04:17:08

问题


I'm trying to return the result of a entity framework query into my own dto class, at the same time as mapping my enum TradeType.

I'm getting the following error

The specified value is not an instance of type 'Edm.Int32' Parameter name: value

Any idea how to fix or a workaround?

Thanks

public IEnumerable<Trade> GetLiveTrades(string routeName)
{
    return _entities.Price.Where(p => p.StatusCode.Equals("A") && p.Period.PeriodYear <= DateTime.Now.Year+1 && p.Route.RouteCode.Equals(routeName)).
        Select(p => new Trade
                        {
                            Volume = (long) (p.Volume ?? 100), 
                            TradeType = (p.PriceTypeCode.Equals("O") ? TradeType.Seller : TradeType.Bidder),
                            Price = p.Price1,
                            TenorStartDate = p.Period.PeriodStartDate.Value,
                            TenorEndDate = p.Period.PeriodStartDate.Value,
                            TradeId = p.ID
                        }).ToList();
        }

public class Trade
{
    public long Volume { get; set; }
    public TradeType TradeType { get; set; }
    public double Price { get; set; }
    public DateTime TenorStartDate { get; set; }
    public DateTime TenorEndDate { get; set; }
    public Guid TradeId { get; set; }
}

回答1:


Enums in projections from Entity Framework projections (Select) is a know issue. If you do

_entities.Price.Where(p => p.StatusCode.Equals("A") &&
    p.Period.PeriodYear <= DateTime.Now.Year + 1 &&
    p.Route.RouteCode.Equals(routeName)).ToList() // ToList !
    .Select(p => new Trade ...

the projection is done by regular linq-to-objects, which is a routine job.


EDIT

As a late afterthought I'd like to add that just a dumb ToList() can be detrimental when the table in question has many columns. It would mean that far more data is transferred to the client than necessary. In such cases it can be useful to do a double projection. First, within the scope of the query provider project to accepted types. Then, after switching to linq-to-objects (AsEnumerable) project to the final type:

_entities.Price.Where(p => p.StatusCode.Equals("A") &&
    p.Period.PeriodYear <= DateTime.Now.Year + 1 &&
    p.Route.RouteCode.Equals(routeName))
    .Select(p => new 
                {
                  Volume = (long) (p.Volume ?? 100), 
                  PriceTypeCode = p.PriceTypeCode,
                  Price = p.Price1,
                  TenorStartDate = p.Period.PeriodStartDate.Value,
                  TenorEndDate = p.Period.PeriodStartDate.Value,
                  TradeId = p.ID
                })
    .AsEnumerable()
    .Select(x => new Trade
                 {
                   Volume = x.Volume, 
                   TradeType = (x.PriceTypeCode.Equals("O") ? TradeType.Seller : TradeType.Bidder),
                   Price = x.Price1,
                   TenorStartDate = x.TenorStartDate,
                   TenorEndDate = x.TenorEndDate,
                   TradeId = x.ID
                 }).



回答2:


Installing .Net 4.5 appears to fix the issue as well (your project can still be on 4.0).

I was having this issue on our staging server (dev and test servers worked fine) and discovered that it did not have .Net 4.5 installed. Once I installed 4.5, the issue cleared up without any code changes.




回答3:


I got this error when trying to update entities, I'm adding this answer because this question is the top result when searching for that eerror. For updating, it is due to a bug in MySQL Connector:

https://bugs.mysql.com/bug.php?id=44801

It appears to affect version 6.0.3 and below:

See the release notes for 6.0.3 MySQL Connector for .Net

It informs that the unsigned int are not supported for EF int this version.

The easiest fix (for me) was to change the column to be signed instead of unsigned.



来源:https://stackoverflow.com/questions/9990196/entity-framework-mapping-enum-the-specified-value-is-not-an-instance-of-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!