Бинарный оператор Equal не определен между типом Nullable <Int32> и Int32
У меня есть следующая модель:
public class DeviceConfigurationModel
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Display(Name = "Device Configuration Id")]
public int DeviceConfigurationId { get; set; }
[Required]
[Display(Name = "Device Profile Name")]
[StringLength(50)]
public string ProfileName { get; set; }
[StringLength(50)]
public string SERV { get; set; }
[StringLength(50)]
public string IPAD { get; set; }
public Nullable<int> PORT { get; set; }
[Required]
[Display(Name = "Is Active")]
public bool IsActive { get; set; }
[Required]
[Display(Name = "Date Created")]
public DateTime DateCreated { get; set; }
}
который я заполняю через консоль менеджера пакетов с помощью командыupdate-database
и следующий код в файле configuration.cs для миграции:
context.DeviceConfigurations.AddOrUpdate(
d => new { d.ProfileName, d.IPAD, d.PORT, d.IsActive },
new DeviceConfigurationModel { ProfileName = "FMG Default Gateway", IPAD = "77.86.28.50", PORT = (int?)90, IsActive = true }
);
Однако всякий раз, когда он пытается запустить эту строку кода, я получаю следующую ошибку в консоли:
The binary operator Equal is not defined for the types 'System.Nullable`1[System.Int32]' and 'System.Int32'.
Кто-нибудь знает, как решить эту проблему, я пытался найти ответы, но большинство решений заключается в том, чтобы сделать его необнуляемым и просто принять ноль, но я не хочу этого делать, поскольку мне нужно использовать нулевое значение для некоторые поля
ОБНОВИТЬ
Поиграв с этим дальше, я сузил это до списка вещей, на которых запускается обновление: если я пропущуd.PORT
с линии
d => new { d.ProfileName, d.IPAD, d.PORT, d.IsActive }
тогда обновление работает нормально. Конечно, должен быть способ заставить обновление также взглянуть на это поле, в противном случае кажется, что использование mvc довольно бесполезно, если оно не может даже обработать простую вещь, например, обнуляемый int