admin管理员组文章数量:1400744
Crossposting from here
I have a class called ModelSetWrapper
which wraps model sets from an EfCore DbContext (Jet, specifically) and returns a dictionary containing the model set information. Here's what the class looks like:
namespace LibFacade.Utils;
public class ModelSetWrapper<T> where T : class
{
private Dictionary<string, List<object>> _data;
public ModelSetWrapper()
{
_data = new Dictionary<string, List<object>>();
PropertyInfo[] properties = typeof(T).GetProperties();
using (ModelContext context = new ModelContext())
{
DbSet<T> dbSet = context.Set<T>();
foreach (PropertyInfo pInfo in properties)
{
List<object> list = dbSet.Select(c => pInfo.GetValue(c)).ToList();
_data[pInfo.Name] = list;
}
}
}
public Dictionary<string, List<object>> Data => _data;
}
This seems to work fine from the .NET side. From a console app, the following runs without any errors:
ModelSetWrapper<Jaugeage> wrapper = new ModelSetWrapper<Jaugeage>();
foreach (KeyValuePair<string, List<object>> kvp in wrapper.Data)
{
Console.WriteLine($"{kvp.Key}, {kvp.Value.Count}");
}
I'm able to load this assembly and types from it using pythonnet without any issues. However when I attempt the following in my python code:
wrapper = ModelSetWrapper[Jaugeage]()
I get an error:
---------------------------------------------------------------------------
InvalidOperationException Traceback (most recent call last)
Cell In[2], line 1
----> 1 wrapper = ModelSetWrapper[Jaugeage]()
InvalidOperationException: The property can only be set once.
at EntityFrameworkCore.Jet.Data.JetConnection.set_DataAccessProviderFactory(DbProviderFactory value)
at EntityFrameworkCore.Jet.Data.JetConnection.Open()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.<>c.<MoveNext>b__21_0(DbContext _, Enumerator enumerator)
at EntityFrameworkCore.Jet.Storage.Internal.JetExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at LibFacade.Utils.ModelSetWrapper`1..ctor() in [C:\Users\admin\Desktop\TEMP\projects\317\notebooks\Lib\LibFacade\ModelSetWrapper.cs](file:///C:/Users/admin/Desktop/TEMP/projects/317/notebooks/Lib/LibFacade/ModelSetWrapper.cs):line 12
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeConstructorWithoutAlloc(Object obj, Boolean wrapInTargetInvocationException)
I have searched far an wide for a solution but don't really know how to start tackling this. Any pointers would be very welcome.
本文标签: cCannot load an EF Core db context wrapper in Python using PythonNETStack Overflow
版权声明:本文标题:c# - Cannot load an EF Core db context wrapper in Python using Python.NET - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744280810a2598641.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论