У меня есть следующая модель:
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'.
Кто-нибудь знает, как исправить эту проблему, я попытался найти ответы, но большинство решений - сделать его непустым и просто принять ноль, но я не хочу этого делать, поскольку мне нужно использовать нулевое значение для некоторых полей
UPDATE
Играя с этим дальше, я сузил это до списка вещей, над которыми выполняется обновление: если я оставлю d.PORT
из строки
d => new { d.ProfileName, d.IPAD, d.PORT, d.IsActive }
тогда обновление работает нормально. Конечно, должен быть способ сделать обновление также взглядом на это поле, иначе кажется, что использование mvc довольно бесполезно, если он не может даже обрабатывать простую вещь, такую как nullable int