2

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

更新条目时出错。有关详细信息,请参阅内部异常。内部异常:字符串或二进制数据将被截断。该语句已终止。

我知道数据库字段的数据不会太长,因为方法 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 应用程序程序集中调用该方法时,它不会不行。

4

0 回答 0