Ответ 1
В методе Entity Framework AddOrUpdate имеется ошибка. Я создал проблему в репозитории EF:
У меня есть следующая проблема с моими идентификаторами обновления при посеве на мой db:
context.ClientPromos.AddOrUpdate(
cp => new { cp.ClientID, cp.Recommendation_ID, cp.PromoCode_ID },
new ClientPromo
{
ClientID = 0,
Recommendation_ID = Rec30Off.RecommendationID,
PromoCode_ID = pc30PerOffProd.PromoCodeID
},
new ClientPromo
{
ClientID = 0,
Recommendation_ID = RecKnow.RecommendationID,
},
new ClientPromo
{
ClientID = 0,
Recommendation_ID = RecCall.RecommendationID,
},
);
context.SaveChanges();
Так как cp.Recommendation_ID
и cp.PromoCode_ID
являются int? datatypes
, он получает следующую ошибку:
Бинарный оператор Equal не определен для типов 'System.Nullable`1 [System.Int32]' и 'System.Int32'.
Я просмотрел эту статью и добавил код modelBuilder
- IsOptional()
, описанный, но он не работает для меня, и я получаю ту же ошибку в этом вопросе.
Если я изменил:
cp => new { cp.ClientID, cp.Recommendation_ID, cp.PromoCode_ID }
To:
cp => new { cp.ClientID }
Он отлично работает, однако это не сработает, если мне нужно будет обновить запись, она будет просто дублировать каждую запись в таблице.
В методе Entity Framework AddOrUpdate имеется ошибка. Я создал проблему в репозитории EF:
Я не уверен, насколько вы знакомы с Nullable Types (Руководство по программированию на С#), но длинная история,
Тип с нулевым значением может представлять правильный диапазон значений для его базовый тип значения плюс дополнительное значение null.
Вы можете присвоить нормальный тип нулевому типу, но НЕ наоборот, как при значении null
мы столкнемся с проблемой, поэтому компилятор поймает эту ошибку во время компиляции.
Однако есть более простые способы обойти эту проблему, если только ваш единственный и простой оператор if будет сортировать все перед распределением.
var myIntVar = myIntVar_Nullable ?? default(int);
который является синтаксическим сахаром для
var myIntVar = myIntVar_Nullable == null ? default(int) : myIntVar_Nullable;