实体框架 - MySQL - 未知异常

3
我有一个问题,不确定是什么原因导致的。我有一个基于代码优先的实体框架数据库,在第一次运行时一切正常。数据库被创建,并且没有抛出任何异常。
在第二次运行时,当实体框架启动并且我尝试第一次调用“保存”函数时,它会抛出此异常:(我的表中没有名为CreatedOn的列)
MySql.Data.MySqlClient.MySqlException: 'Unknown column 'CreatedOn' in 'field list'' 

这是我的课程

[DbConfigurationType(typeof(MySqlEFConfiguration))]
    public partial class MyContext : DbContext
    {
        public MyContext()
            : base("name=MyContext")
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());

            if (Database.Exists())
            {
                if (!Database.CompatibleWithModel(false))
                {
                    Database.Initialize(true);
                }
            }
        }
        ...Defining DbSets

我也在使用迁移。

最初我在启动时也遇到了这个异常,但是我删除了一些在启动时添加到数据库中的代码。我认为连接还没有准备好... 我假设这与连接没有完全建立有关,但我不知道如何确保我们在离开我的UnitOfWork类之前已经连接。因此,我有了这个类,将所有的数据库表连接到我的上下文:

 public UnitOfWork(MyContext contextMain)
    {
        _context = contextMain;

        _context.Database.CommandTimeout = 600;

        PartFamilies = new PartFamilyRepository(_context);
        PartNumbers = new PartNumberRepository(_context);
        Measurements = new MeasurementRepository(_context);
        Attributes = new AttributeRepository(_context);
        ProgramNumbers = new ProgramNumberRepository(_context);
        FamilyBiases = new FamilyBiasRepository(_context);
        BagQuantities = new BagQuantityRepository(_context);
        UndetectableMods = new UndetectableRepository(_context);
        OverLapParts = new OverLapRepository(_context);
        PartGroups = new PartGroupRepository(_context);
        Settings = new SettingsRepository(_context);

        CreateDefaultDatabase(contextMain.Database.CreateIfNotExists(), _context);
    }

最后,当我想使用我的数据库时,我会这样调用它:
using (var _unitOfWork = new UnitOfWork(new MyContext())){}

更新: 我尝试关闭Entity Framework的懒加载,但这并没有影响异常。我仍然收到它。
这里有一个线索可能会帮助更有知识的人: enter image description here 这个ObjectContext还没有运行,如果我单击那个图标来运行线程,我就不再收到这个异常了。我不知道如何强制在创建时运行这些线程。
我正在使用以下内容: .NET Framework 4.8 EntityFramework 6.4.4 Mysql.Data 8.0.21 MySql.Data.EntityFramework 8.0.21

你是在使用DotNet Framework还是DotNet-CORE?如果是“Core”,那么是哪个版本?2.1还是3.1+? - granadaCoder
我正在使用.NET Framework 4.8,我已经将所有的依赖项都更新到了问题中。 - Jay Mason
1个回答

2
如果在调试选项中勾选“仅我的代码”,您应该不会再看到这个错误。这里有解释:Error "column c.CreatedOn does not exist..." in PostgreSQL logs during code first context initialization using the Devart dotConnect provider
如果您不想打开“仅我的代码”,那么您可以在抛出异常的位置添加异常处理。以下方法虽然不太优雅,但应该能起作用:
try
{
   ...
}
catch (MySqlException e)
{
   if(!e.Message.Equals("Unknown column 'CreatedOn' in 'field list'")
   {
      throw;
   }
}

谢谢,但这感觉像是一个变通方法,并不适用于我的解决方案。我使用了许多托管和非托管的DLL,并且我需要能够看到所有的异常。这只是感觉像是掩盖了MySQL抛出的异常。如果可能的话,我想找出如何解决它。 - Jay Mason
它并没有指示你的代码有任何问题,因此没有什么需要修复的。 - Peter
这可能是我创建迁移的方式不同,因为我的另一个项目没有这个问题。重置迁移并重新创建是否值得尝试?Entity Framework 会有不同的行为吗? - Jay Mason
我不知道那会不会影响它。我编辑了我的答案,提供了一个建议,可以在不打开"Just My Code"的情况下忽略它。 - Peter
即使在Try Catch中,它仍然会触发异常并中断。我只需勾选复选框以忽略来自两个DLL的此类异常。感谢您的帮助,这不是我想要解决此问题的方式。我更喜欢Entity Framework有一种方法可以防止首先抛出此异常。 - Jay Mason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接