为什么Entity Framework会抛出“字符串或二进制数据会被截断”异常?

时间:2013-04-06 17:24:16

标签: entity-framework entity-framework-4.1

如果您查看下面的代码,您会看到我尝试以两种不同的方式将相同的数据添加到我的上下文中。 One - 方法A,我通常使用没有问题 - 当我在我的上下文中调用SaveChanges()时不断抛出此异常:

  

更新条目时发生错误。有关详细信息,请参阅内部异常INNER EXCEPTION:字符串或二进制数据将被截断。声明已经终止。

我知道数据库字段的数据不是太长,因为方法B使用与方法A完全相同的数据,但由于显而易见的原因而不是理想的插入方式,因此工作正常。它们之间唯一的区别在于,在方法B中,我在方法中创建了一个实体类的新实例,该方法与DbContext对话并为其属性分配传递给该方法的实体实例的属性值。任何人都可以解释可能发生的事情吗?

public class MyEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime LiftOff { get; set; }
}

//**************************************
public class MyContext : DbContext
{
    public DbSet<MyEntity> MyEntities { get; set; }
}

//**********************************
public class EntityManager
{
    public MyEntity AddEntity(MyEntity entity)
    {
        // Method A: Throws exception:
        MyEntity e = null;
        using (MyContext context = new MyContext())
        {
            e = context.MyEntities.Add(entity);
            context.SaveChanges();
        }

        //Method B: Works fine:
        e = new MyEntity();
        e.Name = entity.Name;
        e.LiftOff = entity.LiftOff;
        using (MyContext context = new MyContext())
        {
            e = context.MyEntities.Add(e);
            context.SaveChanges();
        }

        return e;
    }
}

感谢您提供的任何帮助/建议。

编辑:EntityManager.AddEntity()方法A是否有效似乎取决于它的调用位置:添加患者的自动化测试(使用NUnit)运行正常,但是当方法从WinForms应用程序程序集调用它,它不起作用。

0 个答案:

没有答案