Используя подход 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)