linq2db / linq2db.EntityFrameworkCore

Bring power of Linq To DB to Entity Framework Core projects
MIT License
449 stars 39 forks source link

Support Microsoft SQLite Provider #343

Closed QianMoXi closed 9 months ago

QianMoXi commented 10 months ago

Register: optionsBuilder.UseLinqToDB(x => x.AddCustomOptions(o => o.UseSQLiteMicrosoft()))

When creating a connection, will throw an exception: dbContext.CreateLinqToDBConnection()

LinqToDB.EntityFrameworkCore.LinqToDBForEFToolsException : Can not instantiate data provider 'SQLite.MS'.
at LinqToDB.EntityFrameworkCore.LinqToDBForEFToolsImplDefault.CreateLinqToDBDataProvider(EFProviderInfo providerInfo, LinqToDBProviderInfo provInfo, EFConnectionInfo connectionInfo)
at LinqToDB.EntityFrameworkCore.LinqToDBForEFToolsImplDefault.<>c__DisplayClass4_0.<GetDataProvider>b__0(ProviderKey k)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at LinqToDB.EntityFrameworkCore.LinqToDBForEFToolsImplDefault.GetDataProvider(DataOptions options, EFProviderInfo providerInfo, EFConnectionInfo connectionInfo)
at LinqToDB.EntityFrameworkCore.LinqToDBForEFTools.GetDataProvider(DataOptions options, EFProviderInfo info, EFConnectionInfo connectionInfo)
at LinqToDB.EntityFrameworkCore.LinqToDBForEFTools.CreateLinqToDBConnection(DbContext context, IDbContextTransaction transaction)

Is this provider not supported or did you forget to add it?

https://github.com/linq2db/linq2db.EntityFrameworkCore/blob/44de54e460309d3790a8eba8fc3375276201c93f/Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs#L181-L182

MaceWindu commented 10 months ago

There is no need to specify exact provider for sqlite, but agree that we should accept specific name too

QianMoXi commented 10 months ago

@MaceWindu I set it because my app is published as a single file, and the following code cannot correctly detect the assembly I am using

https://github.com/linq2db/linq2db/blob/3cff24499ad2a43547920c4eaa55c245097e32ca/Source/LinqToDB/DataProvider/SQLite/SQLiteTools.cs#L63C1-L78C4

I can solve the problem with SQL server in this way, but it does not work for sqlite

optionsBuilder.UseLinqToDB(x => x.AddCustomOptions(o => o.UseSqlServer(SqlServerVersion.v2008, SqlServerProvider.MicrosoftDataSqlClient)))
QianMoXi commented 10 months ago

I've found a solution to this problem:

optionsBuilder.UseLinqToDB(x => x.AddCustomOptions(o => o.UseDataProvider(SQLiteTools.GetDataProvider(ProviderName.SQLiteMS))))