powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 5 - Как увеличить значение одного поля?
25 сообщений из 97, страница 2 из 4
EF 5 - Как увеличить значение одного поля?
    #38267251
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,

с чего бы это недоделка? Если тип не computed, EF передает значение поля в запрос на вставку/изменение, поэтому Default в базе и не срабатывает. На основании чего EF должен исключить поле?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267256
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchM234,

с чего бы это недоделка? Если тип не computed, EF передает значение поля в запрос на вставку/изменение, поэтому Default в базе и не срабатывает. На основании чего EF должен исключить поле?

На основании того, что значение при вставке не указано - как это делает SQL-cервер. Почему нет?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267260
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,

А как он отличит что значение не указано от "указано null" или "указано 01.01.0001" ? Может вы хотели чтобы эти значения в базу попали?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267286
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchM234,

А как он отличит что значение не указано от "указано null" или "указано 01.01.0001" ? Может вы хотели чтобы эти значения в базу попали?

Мне всё равно как.
Например по отсутствию в конструкторе:
Код: c#
1.
2.
ctx.MyOtherTable.Add(new MyOtherTable { Field1 = 1, Field2 = "test"});
ctx.SaveChanges();



раз Created тут нет, то попробовать и не писать его в генерируемый SQL-запрос совсем - тогда сервер возьмёт Default если он определён или вернёт ошибку.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267293
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,

А где гарантия, что между вызовом конструктора и добавлением сущности в контекст вы не изменили значение ее свойства?
P.S. EF это инструмент, а не телепат.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267388
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchAntonariy,

AntonariyЧасто нужно из одной таблицы получить новые id, чтобы вставить их в другую

Достаточно присвоить значение свойству навигации, ID будет сам подставлен при вставке.Можно тынц на пример, где это делается?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267390
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267399
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchM234,

А как он отличит что значение не указано от "указано null" или "указано 01.01.0001" ?Запретить null. А 01.01.0001 и не null вовсе.
LelouchМожет вы хотели чтобы эти значения в базу попали?Как правило потребность сделать дефолт не пересекается с потребностью сделать null в том же поле. Иначе смысл дефолта только во одном — возможности перезаписать его null'ом позже. Но с ходу я не могу придумать, к чему это можно присобачить. И потом, на такую редкую ситуацию не лениво и руками конструктор дописать.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267409
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Вопрос в том как EF должен отличить состояние "присвоен null" или "присвоено 01.01.0001" от "не нужно указывать в запросе" ?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267458
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchAntonariy,

Вопрос в том как EF должен отличить состояние "присвоен null" или "присвоено 01.01.0001" от "не нужно указывать в запросе" ?Нужно, чтобы поля модели, имеющие дефолт и запрет на null, генерировались как Nullable(Of T). Тогда, если поле содержит null, то подразумевается дефолт, и оно исключается из вставки.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38268320
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

1) это неудобно
2) А если поле Nullable само по себе, но имеет Default в базе?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38268436
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, товарищи M234, Lelouch и Antonariy, развеиваю печаль по поводу дефолтных значений, чеков (ограничений) и прочей DB-гадости :)
1. Дефолтные DB значения - это зло, которое не ложится нормальным грузом в типизированную схему датаконтекста. Логика - только на стороне app layer, никаких костылей БД. Кому не нравится - пишите хранимки, намапливайте на контекст и радуйтесь DB-ориентированным возможностям. Лично я против такого подхода в принципе.
2. Если нужно серверное время (по сути аткуально для двухзвенок, что так же является злом), курим это либо через Database.SqlQuery достаем функцию GETDATE.
3. Кто хочет нормально отвязно от возможностей конкретной СУБД программировать, должен забыть все эти default value, чеки, триггеры и прочий мусор.
4. Вопросы, пожелания :)?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38268953
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchAntonariy,

1) это неудобно
2) А если поле Nullable само по себе, но имеет Default в базе?1) Это неубедительно. Неудобно может быть делать что-то. Это же наоборот, избавляет от необходимости делать кое-что.
2) Ну и делать то, что уже делается сейчас, как будто дефолтов не существует в природе.

МСУ4. Вопросы, пожелания :)?Запилить печеньки для тех, кто не хочет отвязываться от субд.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38268971
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

1) Это избавляет в 1 случае от необходимости задать значение. А во всех остальных случаях это вносит необходимость использовать .Value или .GetValueOrDefault(). Так же это мешает использовать сущности в качестве объектов бизнесс-логики.
2) Ну так найдется второй M234, который скажет что это недоделка EF)
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38268975
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

AntonariyЗапилить печеньки для тех, кто не хочет отвязываться от субд.

Там есть печенька в виде Database.ExecuteSqlCommand и т.д., нужно еще?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38268982
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchА во всех остальных случаях это вносит необходимость использовать .Value или .GetValueOrDefault(). Так же это мешает использовать сущности в качестве объектов бизнесс-логики.Без конкретных примеров все еще не убедительно. Не вижу необходимости, не вижу помех в использовании.

LelouchТам есть печенька в виде Database.ExecuteSqlCommand и т.д., нужно еще?Это не печенька, а не молотое зерно.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38268986
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

то есть представить, что к каждому полю придется дописывать .Value / GetValueOrDefault() вы без примера не способны?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class Person
{
	public string Name { get; set; }
	public int? Age { get; set; }
}

var p = new Person();
p.Age = ... ; // И вот тут мы начинаем вспоминать, есть ли у Age значение по-умолчанию и является ли null допустимым значением.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38269026
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не убедительно.

Не помните — пишите что хотите, никаких запретов тому нет, тем более что вы и так это уже делаете. А я помню и писать не хочу. Пусть компьютер пишет, он это быстрее делает. В конце концов в мастере обновления модели из базы можно вкорячить четвертую галку "(do not) use database defaults", чтобы не лишать любителей подуть на холодное их любимого занятия.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38269033
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одной из баз, на которую со временем будет натягиваться ef, более трехсот таблиц, в каждой есть дефолты, и в большей части не по одному. И вместо того, чтобы тынцнуть галочку, мне придется писать триста сраных конструкторов.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38269036
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

И что даст эта опция? Как контекст поймет, какие свойства у сущности заданы, а какие нет, чтобы в момент insert не включить их в запрос? Вы и M234 на этот вопрос никак ответить не можете)
Ваше предложение с null - кривое до безобразия, для nullable полей базы не работает, для не-nullable полей требует дополнительных операций.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38269120
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

У вас неиллюзорные проблемы с формальной логикой. Рассматриваем поле, имеющее дефолт, больше ничего, следите внимательно.

I. Ситуация, которую имеем сейчас:
1) EF ничего не знает о дефолтах.
2) Если ничего не делать и поле допускает null, то сохраняется null
3) Если ничего не делать и поле не допускает null, то при попытке присвоить null генерируется исключение. Чтобы обработать это исключение требуется п. 4
4) Если произвести дополнительные операции (создать конструктор, прописать не null значения), то сохранится то, что прописано в конструкторе.

II. Чего хочется.
1) EF знает о существовании о дефолтов.
2) Если ничего не делать и поле допускает null, то сохраняется null
3) Если ничего не делать и поле не допускает null, то null исключается из операции вставки. В базу попадает прописанный в ней же дефолт, исключение не генерируется. Пункт 4 не нужен.
автор для не-nullable полей требует дополнительных операцийВы в своем уме, какие дополнительные операции? Пересчитайте пункты.

LelouchИ что даст эта опция?
1) Опция называется "Use database defaults"
2) При ее выключении реализуется I.
3) При ее включении реализуется II.

Lelouchкривое до безобразияА вот степень безобразия хотелось бы рассмотреть подробнее (остальное, как мы видим, ни о чем). Операция обновления в случае II. Представим самый трэш и адъ; с клиентской стороны кодит на js классический ССЗБ и умудряется в json прописать null в те поля, где их не было, ведь получен объект от сервера, который теоретически не мог вернуть null в тех полях, где не надо, потому запись получена непосредственно из базы, запрещающей в этих полях null. Фух. Что же произойдет? Если процедура обновления, создающая для этого объект модели (или его конструктор), принимает параметрами значения примитивных типов (маловероятно), то ошибка возникнет после десериализации на этапе вызовы этой процедуры/конструктора. Обычно же процедура получает анонимный объект, который приводит к соответствующему типу. В этом случае ошибку сгенерирует база.

В итоге "безобразие" II выливается в то, на каком уровне ССЗБ словит исключение при операции деления обновления на null. Прошу заметить: в случае операции обновления все отличие I от II лишь тем, что в I исключение сгенерируется конкретно в самой процедуре обновления, а не где-то еще.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38269181
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди, забудьте про дефолты. В ORM это как кобыле пятое колесо. Никаких дефолтовых значений. Есть только класс, как намапим значения на него, то и уйдет в базу. Точка.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38269210
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУВ сферическом ORM это как кобыле пятое колесо.Поправил.

Ничего нового.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38269288
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

[quote Antonariy]Представим самый трэш и адъ; с клиентской стороны кодит на js классический ССЗБ и умудряется в json прописать null в те поля, где их не было, ведь получен объект от сервера, который теоретически не мог вернуть null в тех полях, где не надо, потому запись получена непосредственно из базы, запрещающей в этих полях null. Фух. Что же произойдет? Если процедура обновления, создающая для этого объект модели (или его конструктор), принимает параметрами значения примитивных типов (маловероятно), то ошибка возникнет после десериализации на этапе вызовы этой процедуры/конструктора. Обычно же процедура получает анонимный объект, который приводит к соответствующему типу. В этом случае ошибку сгенерирует база.[quote]

А в какой тип десереализуется JSON, если поля не nullable можно узнать? А то пока я вижу только 1 исход - при десерелизации получится исключение и на этом всё закончится.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38269317
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchА в какой тип десереализуется JSON, если поля не nullable можно узнать? А то пока я вижу только 1 исход - при десерелизации получится исключение и на этом всё закончится.Это происходит в случае I. А в II JSON десериализуется в тип, в котором nullable свойство соответствует не nullable полю в базе. Я же с этого начал: 14330086 . Поэтому при десериализации ошибки не возникнет, она возникнет позже. Либо в базе, либо в самой процедуре, если есть еще какие-то манипуляции с этим полем перед сохранением и нет проверки на null. Но в любом случае это будет null exception, и я не вижу принципиальной разницы, на каком уровне она выскочит. Фактическое поведение немного изменилось, но формальное осталось прежним, не противоречащем правилам.

И напомню, эта ситуация исключительная, не способная возникнуть при минимальном наличии мозга: ну зачем насильно пихать null в обязательные поля, уже имеющие значения? А шанс попасть в продакшн у такого жирного косяка намного меньше одного процента.

А с другой стороны мне не надо писать триста сраных конструкторов. Или триста сраных вьюшек, в которых отфильтрованы default-поля. И скакать с субд на субд не надо. Хочу галку! :)
...
Рейтинг: 0 / 0
25 сообщений из 97, страница 2 из 4
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 5 - Как увеличить значение одного поля?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]