实体框架 - MySQL - 未知异常

时间:2021-01-29 14:31:09

标签: c# mysql entity-framework

我有一个问题,我不确定是什么原因造成的。我有一个代码优先的实体框架数据库,在第一次运行时一切正常。数据库被创建并且没有异常被抛出。

在第二次运行时,当实体框架启动并且我第一次尝试调用“保存”函数时,它抛出了这个异常:(我的表中没有一个名为 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())){}

更新: 我试图关闭实体框架的延迟加载,但这并没有影响异常。我还是收到了。

这里有一条线索可以帮助有更多知识的人: enter image description here

此 ObjectContext 尚未运行,如果我单击该图标来运行线程,则不会再出现此异常。我不知道如何强制这些线程在创建时运行。

我正在使用以下内容:

.NET 框架 4.8

实体框架 6.4.4

Mysql.Data 8.0.21

MySql.Data.EntityFramework 8.0.21

1 个答案:

答案 0 :(得分: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;
   }
}