数据在EF7中保存为一个对象 - 不是很多

时间:2015-10-14 22:02:21

标签: entity-framework asp.net-core

我在EF7中有一个对象模型,如下所示:

Story -> StoryPhotos[]

我通过故事的表单提交来构建模型,其中用户还可以附加N个照片。模型创建看起来像这样:

var story = new Story
{
  // ...

  StoryPhotos = myFormData.Photos.Select(p => new StoryPhoto {
    Name = p.Name,
    FileName = p.FileName,
    etc.
  }).ToList()
}

然后,一旦我构建了数据模型,我就通过存储库保存数据。

await repository.AddOrUpdateStoryAsync(story)

看起来像这样

if (story.Id == 0)
{
    context.Stories.Add(story);
    context.StoryPhotos.AddRange(story.StoryPhotos);
}
else
{
  // Update properties for an edit.
}
await context.SaveChangesAsync();

这很有效......只要我只有一个StoryPhoto。一旦我将多个放入数组中,我就会遇到这个异常:

An unhandled exception occurred while processing the request.

SqlException: Incorrect syntax near ','.
System.Data.SqlClient.SqlCommand.<>c__DisplayClass16.<ExecuteDbDataReaderAsync>b__17(Task`1 result)

我的研究表明,关于EF7如何保存对象图存在一些不同的问题,但我很困惑的情况是一个保存罚款,多个不保存,没有其他更改代码

我正在使用EntityFramework-SqlServer 7.0.0-beta7。

1 个答案:

答案 0 :(得分:0)

嗯,这是答案。我还在ASP.NET 5实体框架GitHub上跟踪response to the issue(这不是问题)。对于任何碰到它的人都在这里重复。

好的,我可以直接在我的SQL数据库上重新创建问题。这是正在生成的查询。

messages.getMessages

我收到了这个错误:

INSERT INTO [StoryPhoto] ([FilePath], [StoryId])
      OUTPUT INSERTED.[Id]
      VALUES ('path1', '174'),
      ('path2', '174'),
      ('path3', '174');

另外,能够找到这个,我用Google搜索我原来的问题有点不同(当我第一次遇到这个问题时),发现this post on SO包含了这个答案:

  

为了使用多行VALUES(),()语法,您需要   运行SQL Server 2008(或更新版本)。

     

由于您运行的是SQL Server 2005,因此需要单独运行   插入语句,使用UNION / UNION ALL或升级实例   (它与Management Studio分开,后者只是一个客户端   用于连接到运行任意数量版本的实例的工具   SQL Server)。

所以,这是我在原帖中的怀疑。此特定应用程序仍在运行SQL Server 2005。

这使我找到了EntityFramework.MicrosoftSqlServer支持的数据库版本,这是2008及更高版本。