簡體   English   中英

實體框架 - MySQL - 未知異常

[英]Entity Framework - MySQL - Unknown Exception

我有一個問題,我不確定是什么原因造成的。 我有一個代碼優先的實體框架數據庫,在第一次運行時一切正常。 數據庫被創建並且沒有拋出異常。

在第二次運行時,當實體框架啟動並且我第一次嘗試調用“保存”function 時,它會引發此異常:(我的表中沒有一個名為 CreatedOn 的列)

MySql.Data.MySqlClient.MySqlException: 'Unknown column 'CreatedOn' in 'field list'' 

這是我的 class

[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 class 之前正確確保我們已連接。 所以我有這個 class 將我的所有數據庫表連接到我的上下文:

 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())){}

更新:我嘗試關閉實體框架的延遲加載,但這並沒有影響異常。 我還是收到了。

這里有一個線索,可以幫助有更多知識的人: 在此處輸入圖像描述

這個 ObjectContext 還沒有運行,如果我點擊那個圖標來運行線程,我不再得到這個異常。 我不知道如何強制這些線程在創建時運行。

我正在使用以下內容:

.NET 框架 4.8

實體框架 6.4.4

Mysql.Data 8.0.21

MySql.Data.EntityFramework 8.0.21

如果您在調試選項中選中 Just My Code,您應該不會再看到這種情況。 這里解釋:

在使用 Devart dotConnect 提供程序進行代碼優先上下文初始化期間,PostgreSQL 日志中出現錯誤“列 c.CreatedOn 不存在...”

如果您不想打開 Just My Code,那么您可以在拋出異常的地方添加異常處理。 以下內容並不優雅,但應該可以:

try
{
   ...
}
catch (MySqlException e)
{
   if(!e.Message.Equals("Unknown column 'CreatedOn' in 'field list'")
   {
      throw;
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM