f# SqlDataProvider .Net Core 2.0 - 不支持在环境中登记
f# SqlDataProvider .Net Core 2.0 - enlisting in ambient is not supported
白天我是一名 C# 程序员,但也是一名 F# 爱好者。
whist 在做一些教程(和蔼可亲)我偶然发现了这个错误
System.NotSupportedException
HResult=0x80131515
Message=Enlisting in Ambient transactions is not supported.
Source=System.Data.SqlClient
StackTrace:
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at FSharp.Data.Sql.Providers.MSSqlServerProvider.FSharp-Data-Sql-Common-ISqlProvider-ProcessUpdates(IDbConnection con, ConcurrentDictionary`2 entities, TransactionOptions transactionOptions, FSharpOption`1 timeout)
at <StartupCode$FSharp-Data-SqlProvider>.$SqlRuntime.DataContext.f@1-52(SqlDataContext __, IDbConnection con, Unit unitVar0)
at FSharp.Data.Sql.Runtime.SqlDataContext.FSharp-Data-Sql-Common-ISqlDataContext-SubmitPendingChanges()
at Program.main(String[] argv) in C:\Users\M_R_N\source\repos\ConsoleApp2\ConsoleApp2\Program.fs:line 34
但是代码看起来很琐碎,我不敢相信它不起作用,我们似乎能够从 (SQL express) 数据库中读取数据,但不能写入(或者至少不能删除) ,我没有尝试添加)。我真的不知道什么是环境事务,我实际上并不关心事务行为我只是想 select 一些数据,更新它或删除它。
这是全部代码....
open System
open FSharp.Data.Sql
[<Literal>]
let ConnectionString =
"Data Source=(localdb)\ProjectsV13;Initial Catalog=suavemusicstore;Integrated Security=SSPI;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
type Sql =
SqlDataProvider<
ConnectionString = ConnectionString,
DatabaseVendor = Common.DatabaseProviderTypes.MSSQLSERVER>
type DbContext = Sql.dataContext
type Album = DbContext.``dbo.AlbumsEntity``
type Genre = DbContext.``dbo.GenresEntity``
let getAlbum id (ctx : DbContext) : Album option =
query {
for album in ctx.Dbo.Albums do
where (album.AlbumId = id)
select album
} |> Seq.tryHead
[<EntryPoint>]
let main argv =
let ctx = Sql.GetDataContext()
match (getAlbum 2 ctx) with
| Some(album) ->
album.Delete()
ctx.SubmitUpdates() // EXCEPTION thrown here
0
| _ -> 0
有解决办法吗?这是我第一次使用类型提供程序和核心,但似乎您无法编写一个简单的 CRUD 应用程序。
这已在其他地方报告,主要是在 C# EF 应用程序中,我认为在这些地方有更大的范围来解决这个问题(也许)。
有什么解决办法吗?我尝试了 upgrading/downgrading 各种金块包,但无济于事
不久前我的玩具 F# 项目遇到了同样的问题。我没有找到任何合适的解决方案,最终完全忽略了交易。这并没有解决根本问题,但对我来说已经足够了(该项目主要用于学习目的)。
let TransactionOptions = {IsolationLevel = IsolationLevel.DontCreateTransaction; Timeout = TimeSpan.FromSeconds(1.0)}
let dbContext = Sql.GetDataContext(TransactionOptions)
我不知道以上是否有效,但这似乎是一个合理的解决方法。
我确实解决了我的问题,但是通过恢复到基于框架的控制台应用程序模板而不是核心模板。
白天我是一名 C# 程序员,但也是一名 F# 爱好者。
whist 在做一些教程(和蔼可亲)我偶然发现了这个错误
System.NotSupportedException
HResult=0x80131515
Message=Enlisting in Ambient transactions is not supported.
Source=System.Data.SqlClient
StackTrace:
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at FSharp.Data.Sql.Providers.MSSqlServerProvider.FSharp-Data-Sql-Common-ISqlProvider-ProcessUpdates(IDbConnection con, ConcurrentDictionary`2 entities, TransactionOptions transactionOptions, FSharpOption`1 timeout)
at <StartupCode$FSharp-Data-SqlProvider>.$SqlRuntime.DataContext.f@1-52(SqlDataContext __, IDbConnection con, Unit unitVar0)
at FSharp.Data.Sql.Runtime.SqlDataContext.FSharp-Data-Sql-Common-ISqlDataContext-SubmitPendingChanges()
at Program.main(String[] argv) in C:\Users\M_R_N\source\repos\ConsoleApp2\ConsoleApp2\Program.fs:line 34
但是代码看起来很琐碎,我不敢相信它不起作用,我们似乎能够从 (SQL express) 数据库中读取数据,但不能写入(或者至少不能删除) ,我没有尝试添加)。我真的不知道什么是环境事务,我实际上并不关心事务行为我只是想 select 一些数据,更新它或删除它。
这是全部代码....
open System
open FSharp.Data.Sql
[<Literal>]
let ConnectionString =
"Data Source=(localdb)\ProjectsV13;Initial Catalog=suavemusicstore;Integrated Security=SSPI;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
type Sql =
SqlDataProvider<
ConnectionString = ConnectionString,
DatabaseVendor = Common.DatabaseProviderTypes.MSSQLSERVER>
type DbContext = Sql.dataContext
type Album = DbContext.``dbo.AlbumsEntity``
type Genre = DbContext.``dbo.GenresEntity``
let getAlbum id (ctx : DbContext) : Album option =
query {
for album in ctx.Dbo.Albums do
where (album.AlbumId = id)
select album
} |> Seq.tryHead
[<EntryPoint>]
let main argv =
let ctx = Sql.GetDataContext()
match (getAlbum 2 ctx) with
| Some(album) ->
album.Delete()
ctx.SubmitUpdates() // EXCEPTION thrown here
0
| _ -> 0
有解决办法吗?这是我第一次使用类型提供程序和核心,但似乎您无法编写一个简单的 CRUD 应用程序。
这已在其他地方报告,主要是在 C# EF 应用程序中,我认为在这些地方有更大的范围来解决这个问题(也许)。
有什么解决办法吗?我尝试了 upgrading/downgrading 各种金块包,但无济于事
不久前我的玩具 F# 项目遇到了同样的问题。我没有找到任何合适的解决方案,最终完全忽略了交易。这并没有解决根本问题,但对我来说已经足够了(该项目主要用于学习目的)。
let TransactionOptions = {IsolationLevel = IsolationLevel.DontCreateTransaction; Timeout = TimeSpan.FromSeconds(1.0)}
let dbContext = Sql.GetDataContext(TransactionOptions)
我不知道以上是否有效,但这似乎是一个合理的解决方法。 我确实解决了我的问题,但是通过恢复到基于框架的控制台应用程序模板而不是核心模板。