Андрей Баранов: да. После метода str.split("\n"); у вас будет массив из 4х строк. Затем вы можете разбить каждую строку в этом массиве на массив из 4х символов (используя str.toCharArray())
Контроллер ничего не должен знать про BL, это не его забота, он должен запрос (с данными или без) получить, вызвать соответствующий сервис/хэлпер/любую другую сущность, отвечающую именно за логику и вернуть результат вычислений клиенту.
Если хотите с самого начала разработки привязать ружьё себе поближе к ноге - делайте толстый контроллер, иначе - в первом комменте хорошо расписано как, чего и куда =)
П.С. почему важно отделять сущности в зависимости от их зоны ответственности хорошо написанно тут
Подключаюсь стандартным пакетом Oracle'ским, пишу статические методы для работы с БД, но хочется EF)
Да вот в том-то и беда, что на компьютере, который имеет доступ к БД, нельзя поставить Студию...
а откуда вы тогда подключаетесь, если на компе, где есть доступ к базе нет доступа к студии? можете ли вы запустить ваше приложение в дебаге и запросить данные и если нет, то как вы тестируете работу с базой?
а как вы сейчас подключаетесь к базе? есть ли у вас возможность стянуть схему бд ну или хотя бы посмотреть структуру таблиц? вы же хотите автоматически модели создать на основе таблиц (DB first)?
mletov: ну вы же использовали ключевое слово static (тут про это можно чуть почитать), который делает инстанс переменной постоянным для всего приложения (в вашем случае ещё и единственным)
skosterin88: Unfortunately, I have no idea about any other possible sources of this problem, another code seems OK...so, just a suggestion for playing around: are you able to change the order of the productElements? if yes - change the place of the problematic items and see if they are still wrong..but if regular foreach works fine with them...sorry, here I'm done =/
skosterin88: one more block with a possible issue is your product.id. You share this value for all threads, so a couple of threads can try to read or write to this variable at the same time. Here are solutions:
1) If it's not necessary to use Int32 for the id field use just GUID and set new Guid for each new product (in this case you don't have to use global var for all threads)
2) use Interlocked.Increment(ref id) instead of id++
3) use lock section for id (not recommended, but still possible solution)
Read more about thread synchronization for avoiding such issues in future.
PS: hope, it's not a problem that this answers are in English