在EF6中使用原始SQL查询时,是否可以调用SaveChanges

时间:2015-03-26 13:13:34

标签: vb.net entity-framework

我想使用sql raw查询以获得更好的性能。

我想知道我是否可以像使用linq提交查询一样使用上下文。如果我将集合绑定到dgv.DataSource并进行了一些(更新),我可以调用db.SaveChanges()将数据存储在数据库中。

示例:

Using context = New BloggingContext()
    Dim blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList()
    datagridview1.dataSource = blogs

    ' if I made some changes in datagridview1 could I
    ' use SaveChanges to commit any changes on button click

    context.SaveChanges()

End Using

1 个答案:

答案 0 :(得分:2)

DbSet.SqlQuery方法返回由上下文跟踪的对象:

  

默认情况下,返回的实体由上下文(MSDN

跟踪

(请注意Database.SqlQuery结果永远不会被上下文跟踪)

如果使用 Entity Framework 更改实体,SaveChanges方法将保留更改。

Using context = New BloggingContext()
    Dim blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList()

    blogs.First().Title = "new Title"

    context.SaveChanges() ' new Title will be persisted on database

End Using

顺便说一句,取决于您使用的 datagridview 的类型( webform winform WPF 等等,您必须将修改后的实体附加到将用于保存更改的上下文中。