Entity framework Mono 3.0.3上EF6的NullReferenceException

Entity framework Mono 3.0.3上EF6的NullReferenceException,entity-framework,mono,entity-framework-6,Entity Framework,Mono,Entity Framework 6,我试图将现有的EntityFramework项目迁移到Mono,但发现了一个奇怪的错误:当执行请求时,EF加载了它在Mono下抛出的模型模式,尽管在带有EF6Alpha 2的.Net下它仍然可以工作。例外情况如下: at System.Xml.XmlReader.CalcBufferSize(流输入) 位于System.Xml.XmlTextReaderImpl.InitStreamInput(Uri baseUri、字符串baseUriStr、流、字节[]字节、Int32字节数、编码) 位于S

我试图将现有的EntityFramework项目迁移到Mono,但发现了一个奇怪的错误:当执行请求时,EF加载了它在Mono下抛出的模型模式,尽管在带有EF6Alpha 2的.Net下它仍然可以工作。例外情况如下:

at System.Xml.XmlReader.CalcBufferSize(流输入)
位于System.Xml.XmlTextReaderImpl.InitStreamInput(Uri baseUri、字符串baseUriStr、流、字节[]字节、Int32字节数、编码)
位于System.Xml.XmlTextReaderImpl..ctor(字符串url、流输入、XmlNameTable nt)
在System.Xml.XmlTextReader..ctor(流输入)
在System.Xml.Schema.XmlSchema.Read(Stream,ValidationEventHandler ValidationEventHandler)
位于System.Data.Entity.Core.EntityModel.SchemaObjectModel.Schema.SomSchemaSetHelper.AddXmlSchemaToSet(XmlSchemaSet schemaSet,XmlSchemaResource schemaResource,HashSet`1 SchemaAlReadyAdded)
位于System.Data.Entity.Core.EntityModel.SchemaObjectModel.Schema.SomSchemaSetHelper.AddXmlSchemaToSet(XmlSchemaSet schemaSet,XmlSchemaResource schemaResource,HashSet`1 SchemaAlReadyAdded)
位于System.Data.Entity.Core.EntityModel.SchemaObjectModel.Schema.SomSchemaSetPer.ComputeSchemaSet(SchemaDataModelation数据模型)
在System.Data.Entity.Core.Common.Utils.Memoizer`2.c_uanostorey106.m_u100()
位于System.Data.Entity.Core.Common.Utils.Memoizer`2.Result.GetValue()处
at System.Data.Entity.Core.Common.Utils.Memoizer`2.Evaluate(TArg arg)
位于System.Data.Entity.Core.EntityModel.SchemaObjectModel.Schema.SomSchemaSetPer.GetSchemaSet(SchemaDataModelation数据模型)
位于System.Data.Entity.Core.EntityModel.SchemaObjectModel.Schema.CreateXmlReaderSettings()处
位于System.Data.Entity.Core.EntityModel.SchemaObjectModel.Schema.Parse(XmlReader sourceReader,String sourceLocation)
位于System.Data.Entity.Core.EntityModel.SchemaObjectModel.SchemaManager.ParseAndValidate(IEnumerable`1 xmlReaders、IEnumerable`1 SourceFilePath、SchemaDataModel、AttributeValueNotification providerNotification、AttributeValueNotification providerManifestTokenNotification、ProviderManifestRequired ProviderManifestRequired、IList`1和schemaCollection)
位于System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader.LoadItems(IEnumerable`1 xmlReaders,IEnumerable`1 SourceFilePath)
位于System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Loader..ctor(IEnumerable`1 xmlReaders,IEnumerable`1 SourceFilePath,Boolean throwOnError)
位于System.Data.Entity.Core.Metadata.Edm.StoreItemCollection.Init(IEnumerable`1 xmlReaders、IEnumerable`1文件路径、布尔throwOnError、DbProviderManifest和providerManifest、DbProviderFactory和providerFactory、String和providerManifestToken、Memorizer`2和CachedTypeFunction)
位于System.Data.Entity.Core.Metadata.Edm.StoreItemCollection..ctor(IEnumerable`1 xmlReaders,IEnumerable`1文件路径)
位于System.Data.Entity.Core.Metadata.Edm.MetadataCache.StoreMetadataEntry.LoadStoreCollection(EdmItemCollection EdmItemCollection,MetadataArtifactLoader loader)
位于System.Data.Entity.Core.Metadata.Edm.MetadataCache.StoreItemCollectionLoader.LoadItemCollection(StoreMetadataEntry条目)
位于System.Data.Entity.Core.Metadata.Edm.MetadataCache.LoadItemCollection[T](IItemCollectionLoader`1 itemCollectionLoader,T条目)
位于System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetOrCreateStoreAndMappingItemCollections(字符串缓存键、MetadataArtifactLoader加载程序、EdmItemCollection EdmItemCollection、Object和entryToken)
位于System.Data.Entity.Core.EntityClient.EntityConnection.LoadStoreItemCollections(MetadataWorkspace工作区、DbConnection storeConnection、DbConnectionOptions connectionOptions、EdmItemCollection EdmItemCollection、MetadataArtifactLoader工件加载器)
位于System.Data.Entity.Core.EntityClient.EntityConnection.GetMetadataWorkspace(布尔初始化AllCollections)
位于System.Data.Entity.Core.EntityClient.EntityConnection.GetMetadataWorkspace()处
位于System.Data.Entity.Core.EntityClient.EntityConnection.InitializeMetadata(数据库连接新建连接、数据库连接原始连接、布尔闭合原始连接失败)
在System.Data.Entity.Core.EntityClient.EntityConnection.Open()中
位于System.Data.Entity.Core.Objects.ObjectContext.EnsureReconnection()处
位于System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(可为null`1 forMergeOption)
在System.Data.Entity.Core.Objects.ObjectQuery`1.m__2C3()中
在System.Lazy`1.CreateValue()处
在System.Lazy`1.LazyInitValue()处
在System.Lazy`1.get_Value()
位于System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
在System.Linq.Enumerable.First[TSource](IEnumerable`1 source)处
位于System.Data.Entity.Core.Objects.elink.ObjectQueryProvider.m__29A[TResult](IEnumerable`1序列)
位于System.Data.Entity.Core.Objects.Elink.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1查询,表达式queryRoot)
位于System.Data.Entity.Core.Objects.Elink.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(表达式)
我猜它无法加载元数据或类似的内容,至少当它们不检查输入流是否为空时,deapest行看起来像XmlDocument和XmlSchema的已知行为。我尝试使用元数据文件而不是嵌入式资源,但没有帮助


我将尝试深入研究源代码,但如果有人已经知道发生了什么,这将非常有用。

您正在运行非常不寻常的配置,由Mono和.NET Framework中的System.XML编译的EF。如果System.XML可以处理模式的位置,但这不是常见的配置,那么这本身应该是可行的


我会检查模式是如何嵌入到程序集中的,以及是否使用相同的名称空间。

有趣的是,在mono sources中搜索文件“CalcBufferSize”不会得到任何结果可能是重复的,不是严格意义上的重复,而是这个问题的答案(“这是一个bug”)这是另一个问题的一部分。因为这是一段时间以前的事了,你的Mono/EF配置成功了吗?是的,在与Xamarin沟通两周后,我终于成功了