EF 代码优先 - 插入或更新;如果表不存在,则出错

本文关键字:如果 不存在 出错 更新 代码 插入 EF | 更新日期: 2023-09-27 18:31:23

通过以下方式使用实体框架 - 代码优先时出现错误。

在 Global.asax.cs 文件内部(在开发期间)

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    Database.SetInitializer<Investments>(new DropCreateDatabaseIfModelChanges<Investments>());
}

投资类相对简单:

public class Investments : DbContext
{
    public Investments() : base("Investments") { }
    public DbSet<Holding> Holdings { get; set; }
}

如果记录存在于表中(仅当表存在),我可以更新记录,如果它们不存在(即使表不存在),我可以使用以下代码插入记录:

Decimal totalPercentage;
List<Holding> mergedHoldings = GetMergedHoldings(fund, out totalPercentage);
try
{
    Investments inv = new Investments();
    foreach (Holding h in mergedHoldings)
    {
        if (inv.Holdings != null && inv.Holdings.Count<Holding>() > 0)
        {
            var record = inv.Holdings.FirstOrDefault(m => m.Name == h.Name);
            if (record != null)
            {
                record.Percentage = h.Percentage;
                record.Symbol = h.Symbol;
                record.Sector = h.Sector;
                inv.Holdings.Attach(record);
                inv.Entry(record).State = System.Data.EntityState.Modified;
            }
        }
        else
            inv.Holdings.Add(h);
    }
    inv.SaveChanges();
}
catch (Exception e)
{
    throw;
}

当表尚不存在时,我的问题就来了。 我无法检查是否有任何记录匹配,因为,好吧,表格不存在! 有没有简单的解决方法? 我知道我想将 if-exist-then-update-else-add 代码保留在那里,但我必须在初始加载运行期间注释掉对 if-exist-then-update 的检查。 这在开发过程中很烦人。

错误是: System.Data.SqlClient.SqlException:无效的对象名称'dbo。控股'

EF 代码优先 - 插入或更新;如果表不存在,则出错

您似乎能做的最好的事情就是运行一些代码来检查表是否存在。但是,这里有很多开销。真的,我建议让这个被你的异常处理捕获,然后在那个时候处理它。你多久没有桌子。

如果你真的想要这个检查,那么你应该在应用程序启动时检查,然后相信它在那之后存在。