小编Kc_*_*Kc_的帖子

Dapper:将行插入表变量

我最近一直在使用dapper,总而言之,除了使用表变量之外,它没有任何问题。

为了进行演示,我使用了此线程中的修改示例。

这段代码运行没有问题:

int tally = connection.Execute(
    "create table #t(Name nvarchar(max), Age int)\n" +
    "insert #t (Name,Age) values(@Name, @Age)", new[]
    {
        new {Age = 1, Name = "sam"},
        new {Age = 2, Name = "bob"}
    });
Run Code Online (Sandbox Code Playgroud)

但这并没有:

int tally = connection.Execute(
    "create table @t(Name nvarchar(max), Age int)\n" +
    "insert @t (Name,Age) values(@Name, @Age)", new[]
    {
        new {Age = 1, Name = "sam"},
        new {Age = 2, Name = "bob"}
    });
Run Code Online (Sandbox Code Playgroud)

唯一的变化是使用表变量而不是临时表 ( @ instead #)。Dapper(或链中的其他任何东西?)似乎以某种方式将其与参数混合并返回“必须声明表变量@t …

c# sql insert table-variable dapper

6
推荐指数
2
解决办法
6999
查看次数

Autofac - 通过工厂方法解决

我似乎无法在 Autofac 中解决这种情况:

  • 我的业务逻辑需要一个 IFinal 类型的对象。
  • 实现类 Final 有几个业务逻辑不知道的依赖,但可以通过 IoCContainer 直接解析。
  • Final 还具有其他依赖项,这些依赖项仅在运行时由业务逻辑知道。
  • 我希望能够在 IFinal 上使用拦截器,因此应通过 IFinal 注册和解析类 Final。

所以我试图为 IFinal 创建一个工厂,但我似乎无法得到正确的解决方案。

示例代码:

    public static void Main(string[] args)
    {
        ContainerBuilder builder = new ContainerBuilder();

        builder.RegisterType<Dependency>().As<IDependency>();

        builder.RegisterType<Final>().As<IFinal>();

        // this fails because context c is not available at the time finalObjectFactoryMethod is used
        builder.Register<Factory>((c,p)=>{
            var dependency = c.Resolve<IDependency>();
            Func<int, IFinal> finalObjectFactoryMethod =
                rta => c.Resolve<IFinal>(
                    new TypedParameter(typeof(IDependency), dependency),
                    new TypedParameter(typeof(int), rta)
                );
            return new Factory(finalObjectFactoryMethod);
        }).As<IFactory>();

        // this works but doesn't use …
Run Code Online (Sandbox Code Playgroud)

c# ioc-container factory-method autofac interceptor

5
推荐指数
2
解决办法
3643
查看次数