我有一个类将执行基于实体框架的查询。这个类是一个通用类,是DbContext
独立的类(我的意思是没有ssdl
或semiliar
文件)。在这个类中,我也将执行原始sql查询。为此,我添加了如下方法:
Return _dbContext.Database.SqlQuery(Of String)(query).FirstOrDefault()
执行标量。但这一阶段有一个错误,即:
Additional information: Argument 'xmlReader' is not valid. A minimum of one .ssdl artifact must be supplied.
当我要创建DbContext
的新实例时,我将这个连接字符串传递给它:
metadata=res://*;provider=System.Data.SqlClient;provider connection string="Data Source=.;Initial Catalog=MyDb;integrated security=true;
错误细节:
System.ArgumentException was unhandled by user code
HResult=-2147024809
Message=Argument 'xmlReader' is not valid. A minimum of one .ssdl artifact must be supplied.
Source=EntityFramework
StackTrace:
at System.Data.Entity.Core.EntityUtil.CheckArgumentEmpty[T](IEnumerable`1& enumerableArgument, Func`2 errorMessage, String argumentName)
at System.Data.Entity.Core.Metadata.Edm.StoreItemCollection..ctor(IEnumerable`1 xmlReaders, IEnumerable`1 filePaths)
at System.Data.Entity.Core.Metadata.Edm.MetadataCache.LoadStoreCollection(EdmItemCollection edmItemCollection, MetadataArtifactLoader loader)
at System.Data.Entity.Core.Metadata.Edm.MetadataCache.<>c__DisplayClass5.<>c__DisplayClass7.<GetMetadataWorkspace>b__1()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Data.Entity.Core.Metadata.Edm.MetadataCache.<>c__DisplayClass5.<>c__DisplayClass7.<GetMetadataWorkspace>b__4()
at System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace.LoadAndCheckItemCollection[T](Func`1 itemCollectionLoader)
at System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace.<>c__DisplayClass16.<.ctor>b__f()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace.GetItemCollection(DataSpace dataSpace, Boolean required)
at System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace.GetItemCollection(DataSpace dataSpace)
at System.Data.Entity.Core.Objects.ObjectContext.InitializeMappingViewCacheFactory(DbContext owner)
at System.Data.Entity.Core.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor, ObjectQueryExecutionPlanFactory objectQueryExecutionPlanFactory, Translator translator, ColumnMapFactory columnMapFactory)
at System.Data.Entity.Core.Objects.ObjectContext..ctor(EntityConnection connection)
at System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel()
at System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.LazyInternalContext.get_ObjectContext()
at System.Data.Entity.Internal.InternalContext.ExecuteSqlQuery[TElement](String sql, Nullable`1 streaming, Object[] parameters)
at System.Data.Entity.Internal.InternalContext.ExecuteSqlQueryAsIEnumerator[TElement](String sql, Nullable`1 streaming, Object[] parameters)
at System.Data.Entity.Internal.InternalContext.ExecuteSqlQuery(Type elementType, String sql, Nullable`1 streaming, Object[] parameters)
at System.Data.Entity.Internal.InternalSqlNonSetQuery.GetEnumerator()
at System.Data.Entity.Infrastructure.DbRawSqlQuery`1.GetEnumerator()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at IdeaDataAccess.EF.EntityFrameworkQueryPerformer`1.ExecuteScalar(String query)
at IdeaBusiness.DatabaseCore.Core`2.ExecuteScalar(String query)
at IdeaBusiness.DatabaseCore.Facade.ExecuteScalar(String query)
at IdeaComponent.IdeaComponent.IdeaGridView.OnRowCreated(GridViewRowEventArgs e) in D:\Solutions\IdeaCenter\Source Code\IdeaCenterV2\IdeaComponent\Components\GridView\IdeaGridView.vb:line 515
at System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource)
at System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding)
at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data)
at System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data)
at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.WebControls.GridView.DataBind()
at WebApplication1.WebForm1.Page_Load(Object sender, EventArgs e) in C:\Users\idea\Desktop\New folder\WebForm1.aspx.vb:line 8
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
发布于 2014-11-15 16:33:43
看看您的连接字符串,它看起来有点缺乏。这是当前项目中的一个,添加了各种行符以便于阅读:
<connectionStrings>
<add name="PowerDespatchConnection"
connectionString="
metadata=res://*/PowerDespatch.csdl|
res://*/PowerDespatch.ssdl|
res://*/PowerDespatch.msl;
provider=System.Data.SqlClient;
provider connection string="data source=athena;initial catalog=RCDev;Integrated Security=SSPI;App=EntityFramework"
"
providerName="System.Data.EntityClient" />
您缺少csdl、ssdl和msl部分。(PowerDespatch是模型的名称。)您应该在EF项目文件夹下的obj\Debug\edmxResourcesToEmbed中找到匹配的文件。
如果缺少这些内容,那么有关如何创建模型的内容是不正确的。
https://stackoverflow.com/questions/26891571
复制相似问题