首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图将.NET string[]映射到FastMember对象,但它是错误的/不是映射

试图将.NET string[]映射到FastMember对象,但它是错误的/不是映射
EN

Stack Overflow用户
提问于 2017-03-03 02:23:57
回答 1查看 750关注 0票数 0

我正在尝试将文件名列表插入到一个简单的Server表中。

我试图利用SqlBulkCopy和@markgravell's FastMember库,就像其他人所建议的那样。

代码语言:javascript
复制
public async Task AddFileNamesAsync(string[] fileNames)
{
    fileNames.ShouldNotBeNull();

    using (var bulkCopy = new SqlBulkCopy(ConnectionString))
    {
        using (var reader = ObjectReader.Create(fileNames))
        {
            bulkCopy.DestinationTableName = "FileNames";
            bulkCopy.ColumnMappings.Add("value", "FileName");
            await bulkCopy.WriteToServerAsync(reader)
                          .ConfigureAwait(false);
        }
    }
}

CREATE TABLE [dbo].[FileNames](
[FileNameId] [int] IDENTITY(1,1) NOT NULL,
[FileName] [varchar](500) NOT NULL

所以我觉得这是一个映射问题,或者是:

  • FastMember无法映射到某些内部备份集合
  • FastMember备份集合不具有与DB列相同的名称,因此无法映射。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-03 03:31:53

不过,我以前从未使用过这个库,但它需要一个属性才能从源代码中查询它的GitHub源代码。现在,在一个字符串上,没有一个属性value,您只需要使用Length属性。使用Length。现在,这可能是FastMember库的一个问题,它创建了一个CallSite访问器函数来从目标对象捕获属性。

来源在这里

现在我已经玩了一个游戏,无法访问任何可以工作的财产。乍一看,它们是在Chars结果中返回的一个TypeAccessor属性,但这似乎不起作用。

我的建议并不是对这个问题的真正答案,而是一种使它发挥作用的方法。如果您创建了一个具有字符串属性的类型,那么您可以有效地绕过它。

代码语言:javascript
复制
public async Task AddFileNamesAsync(string[] fileNames)
{
    fileNames.ShouldNotBeNull();

    var list = fileNames.Select(f => new { value = f });

    using (var bulkCopy = new SqlBulkCopy(ConnectionString))
    {
        using (var reader = ObjectReader.Create(list))
        {
            bulkCopy.DestinationTableName = "FileNames";
            bulkCopy.ColumnMappings.Add("value", "FileName");

            try
            {
                await bulkCopy.WriteToServerAsync(reader)
                                .ConfigureAwait(false);

            }
            catch(Exception ex)
            {

            }
        }
    }
}

现在,这将起作用,因为我们生成了一个新类型,其属性为value,即每个文件名。现在,执行应该像预期的那样工作。(请注意,try..catch...只是用于测试)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42569519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档