我使用LINQ to SQL将数据从SQLite数据库映射到C#对象。当我在Visual Studio项目中运行它时,一切都很完美,但出于某种原因,我无法让它在Unity中运行。
非常简化的代码如下:
foreach
但是在DbCommand
的头部抛出了一个InvalidOperationException,说“由于对象的当前状态,”操作无效“。
System.Data.dll
时会起作用。System.Data.Linq.dll
,Mono.Data.Sqlite
,sqlite3.dll
,以及来自SQLite网站的sqlite3.def
和InvalidOperationException: Operation is not valid due to the current state of the object
System.Linq.Enumerable.Single[MemberInfo] (IEnumerable`1 source, System.Func`2 predicate, Fallback fallback)
System.Linq.Enumerable.Single[MemberInfo] (IEnumerable`1 source)
DbLinq.Data.Linq.Mapping.AttributedMetaAssociation..ctor (System.Reflection.MemberInfo member, System.Data.Linq.Mapping. AssociationAttribute attribute, System.Data.Linq.Mapping.MetaDataMember metaDataMember)
DbLinq.Data.Linq.Mapping.AttributedMetaType+<GetAssociations>c__Iterator5.MoveNext ()
System.Collections.Generic.List`1[System.Data.Linq.Mapping.MetaAssociation].AddEnumerable (IEnumerable`1 enumerable) (at / Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/List.cs:128)
System.Collections.Generic.List`1[System.Data.Linq.Mapping.MetaAssociation]..ctor (IEnumerable`1 collection) (at /Users/ builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/List.cs:65)
System.Linq.Enumerable.ToList[MetaAssociation] (IEnumerable`1 source)
DbLinq.Data.Linq.Mapping.AttributedMetaType.get_Associations ()
System.Data.Linq.DataContext.SetEntitySetsQueries (System.Object entity)
System.Data.Linq.DataContext._GetOrRegisterEntity (System.Object entity)
System.Data.Linq.DataContext.Register (System.Object entity)
DbLinq.Data.Linq.Sugar.Implementation.QueryRunner.Select[Output] (DbLinq.Data.Linq.Sugar.SelectQuery selectQuery)
DbLinq.Data.Linq.Implementation.QueryProvider`1[Bitcoin.Output].GetEnumerator ()
System.Data.Linq.Table`1[Bitcoin.Output].GetEnumerator ()
DAO.SQLiteDAO.test (System.String filePath) (at Assets/DAO/SQLiteDAO.cs:103)
DAO.SQLiteDAO..ctor (System.String filePath) (at Assets/DAO/SQLiteDAO.cs:25)
SphereSpawner.Start () (at Assets/SphereSpawner.cs:30)
。例外情况如下:
Single()
我在这里阅读的所有内容看似相似,但我从未在任何事情上积极使用UITableViewController
,所以不可能;而且我很确定列表也不是空的。它至少应该不是。
请帮助,我在这里失去理智:P
答案 0 :(得分:0)
所以是的,显然映射是问题所在。看起来Mono.Data.Sqlite需要比System.Data.SQLite更明确的属性,而我在后者中完美运行的解决方案并不适用于前者。
我发现:
Association
必须指定Name
。IsForeignKey=true
必须在适用时设置。Association
中用作外键的ID无法存储在公共Column
成员中;相反,它们必须使用Storage="privateMember"
包装在属性中。最后,为了确定,我将每个Column
映射实现为属性。