具有某个非可空int字段的Bulkinsert会导致InvalidOperationException,表示该字段不允许使用DBNull.Value

时间:2015-07-02 12:24:42

标签: entity-framework entity-framework-6 bulkinsert ef-bulkinsert

我正在使用

中的EntityFramework.BulkInsert

https://efbulkinsert.codeplex.com/

尝试将List中的一些记录插入数据库。

我得到的是关于int字段的例外,其中不允许等于DBNull.Value的值。

但是,它不是模型中的可空字段,因此其中至少有一个值0。将该值设置为null的概念不适用。实际上我明确地设置了值。我尝试过除0之外的其他值,得到相同的异常。

为什么我会得到例外?

详细

我有一个包含这样的实体的列表:

var foos = new List<Foo>();

其中Foo是一个定义为的实体类:

public partial class Foo
{
  public int id { get; set; }
  public int SendAttempts { get; set; }
  public Nullable<System.DateTime> LastSendAttempt { get; set; }
  public string LastSendAttemptMessage { get; set; }
  public Nullable<System.DateTime> SendDate { get; set; }
  public int BarID { get; set; }
  public virtual Bar Bar { get; set; }
}

列表中填充了一个循环,可以添加如下实体:

using (var transactionScope = new TransactionScope())
{
    var foos = new List<Foo>();
    foreach (var id in ids)
    {
      var foo = new Foo
      {
        SendAttempts = 0,
        SendDate = DateTime.Now,
        BarID = id
      };

      foos.Add(foo);
    }

  _entities.BulkInsert(foos);

  _entities.SaveChanges();
  transactionScope.Complete();
}

并且BulkInsert行中出现异常并带有消息

  

专栏&#39; SendAttempts&#39;不允许DBNull.Value。

1 个答案:

答案 0 :(得分:-2)

我有同样的问题。检查EF模型和数据库中的列顺序。必须是一样的。