如何使用Castle Windsor注册Ef core数据库上下文?

6

我有一个基于 .net core 的项目。我想要使用 Castle Windosr 注册 Ef Core 上下文,但是我找不到在 .net core 中实现 EfCore Wireup 上下文的解决方案。谢谢。

2个回答

3

如果您想要做这个,首先需要知道您有一个上下文(Context),其中包含一个DbContextOptionsBuilder参数。如果您已经添加了这些构造函数,那么您也需要进行注册。现在,我下面写的代码使您不再需要使用OnConfiguring方法。

   public static class DbContextFactoryBuilder
{
    public static IDbContext Create(string connectionString)
    {
        var result = new MyDbContext(new DbContextOptionsBuilder().UseSqlServer(connectionString).Options);
        return result;
    }
}

并且还有在城堡注册的代码。

container.Register(Component.For<MyDbContext>().UsingFactoryMethod(c => DbContextFactoryBuilder.Create(@"---your connection string---")));

0

另一个选择是:

public class MyContext : DbContext
{
    private readonly string connectionString;

    public MyContext (string connectionString)
    {
        this.connectionString = connectionString;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(this.connectionString);
    }
}

Component.For<MyContext>().DependsOn(Property.ForKey<string>().Eq("your connection string")));

感谢您的评论,但我想在.NET Core中配置db上下文,而您的解决方案在.NET Core中不起作用,因为EF Core中的参数化构造函数与Entity Framework DbContext参数化构造函数不同。Amir Amini的解决方案对我非常有效。 - John
@d7saee,我知道这是关于ef core的,它可以在.net core中运行!Ef core中的DbContext有两个构造函数,一个公共的带有DbContextOptionsBuilder(如不同答案所示),另一个是保护的没有任何参数。因此,最终您可以创建您的上下文而无需传递DbContextOptionsBuilder,因为您的自定义构造函数将隐式调用基类中的默认构造函数。 - Jan Muncinsky

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