我可以告诉实体框架在添加迁移期间使用哪个构造函数吗?

本文关键字:构造函数 实体 框架 迁移 添加 我可以 | 更新日期: 2023-09-27 18:11:28

在运行add-migration

时,我得到了这个非常奇怪的异常
System.Data.SqlClient.SqlException: Invalid column name xxx

结果是问题出在DbContext类的构造函数上。它有一些传递给它的选项,它在常规运行时使用,但这会使实体框架失败。如果a删除了构造函数add-migration中的代码,则运行顺利。

所以我的问题是:我可以告诉实体框架在add-migration期间使用哪个构造函数吗?

编辑:

下面是构造函数的外观。这行不通
    public MyContext()
    {
        /*EF needs me*/
    }
    public MyContext(DbContextOptions<MyContext> options) : base(options)
    {
        if (_isInitted) return;
        if (!ShouldInitInEnvironment(options)) return;
        Database.Migrate();
        PopulateDbWith(new DemoData());
        _isInitted = true;
    }

    public MyContext(DbContextOptions<MyContext> options) : base(options)
    {
    }

我可以告诉实体框架在添加迁移期间使用哪个构造函数吗?

是。在与DbContext相同的项目中实现IDbContextFactory<T>接口:

public class YourDbContextFactory : IDbContextFactory<MyContext>
{
    public MyContext Create()
    {
        return new MyContext(...);
    }

Create()方法由EF调用,您可以根据自己的喜好设置构造函数。