EF5: значение с плавающей запятой MySQL преобразуется в свойство Entity Single - запятая теряется - PullRequest
0 голосов
/ 07 декабря 2018

Используя подход DatabaseFirst с EF5, поле float в mySQL преобразуется в свойство Single в соответствующей сущности в DatabaseModel.Иногда кажется, что запятая информация полностью теряется, например:

  • 1 (mySQL) -> 1 (сущность)
  • 1,5 (mySQL) -> 15 (сущность)
  • 0,2 (mySQL) -> 2E + 08 (сущность)

В моей базе данных есть item, произведенные tool с определенными productiondata s.Для каждого tool имеется коллекция productiondata (от 1 до многих).Также каждый item имеет коллекцию productiondata (от 1 до многих).В моем коде есть одна универсальная функция, которая загружает каждую таблицу базы данных в List<entity>.List<productiondata> в порядке.List<tool> включает коллекцию tool.productiondata, что тоже нормально.List<item> включает коллекцию item.productiondata, содержащую поврежденные значения с плавающей точкой.Я не вижу причин, по которым он работает два раза, а один раз - нет, поскольку все объекты загружаются одной и той же функцией ниже ...

public void loadFromDatabase<TEntity>(ref List<TEntity> lst, List<string> lstCollectionNames) where TEntity : class
{
    using (var ctx = new techdbEntities1())
    {
        ctx.Configuration.LazyLoadingEnabled = false;

        IQueryable<TEntity> dbSet = ctx.Set<TEntity>();

        if (dbSet != null)
        {
            foreach (var collectionName in lstCollectionNames)
                dbSet = dbSet.Include(collectionName);  // 'Eager Loading'
            lst = dbSet.ToList<TEntity>();

            foreach (TEntity e in lst)                        
                ctx.Entry(e).State = EntityState.Unchanged;     // DBEntityEntry.State

            foreach (TEntity e in lst)
                e.GetType().GetProperty("State").SetValue(e, StateEnum.UnModified);     // TEntity.State
        }
    }
}

В настоящий момент я могу получить productiondata для элемента изList<productiondata> вместо item.productiondata из List<item>, что решает проблему на поверхности.Но я все еще очень заинтересован в причине поврежденных полей с плавающей точкой.

Вот sql:

CONSTRAINT `fk_productiondata_item1`    
FOREIGN KEY (`item_internalNr`)    
REFERENCES `techdb`.`item` (`internalNr`)    
ON DELETE NO ACTION  
ON UPDATE NO ACTION,  

CONSTRAINT `fk_productiondata_tool1`    
FOREIGN KEY (`tool_basetool_internalNr` , `tool_number`)    
REFERENCES `techdb`.`tool` (`basetool_internalNr` , `number`)
ON DELETE NO ACTION 
ON UPDATE NO ACTION)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...