13

私は次のモデルを持っています:

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'.

誰かがこの問題を解決する方法を知っていますか、私は答えを探してみましたが、ほとんどの解決策はそれをnull不可にし、ゼロを受け入れることですが、ゼロ値を使用する必要があるため、これを行いたくありませんいくつかのフィールド

アップデート

これをさらに試した後、更新が実行されるもののリストにこれを絞り込みました:d.PORT行から除外した場合

d => new { d.ProfileName, d.IPAD, d.PORT, d.IsActive }

その後、更新は正常に機能します。確かに、更新時にこのフィールドも確認する方法が必要です。そうでない場合、null 許容 int のような単純なものさえ処理できない場合、mvc の使用はかなり役に立たないようです。

4

1 に答える 1

2

Fluent API を使用して明示的にフィールドを Optional に設定してみてください。

 public class YourContext : DbContext
    {
        public DbSet<DeviceConfigurationModel> DeviceConfigurations { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<DeviceConfigurationModel>().Property(x => x.PORT).IsOptional();
        }
    }

これにより、型が強制的に null 可能になります。

何らかの理由で、int?代わりにプロパティを宣言するNullable<int>と、EF は期待どおりにプロパティを生成します。

于 2013-06-05T13:15:43.267 に答える