【发布时间】:2016-08-22 16:42:10
【问题描述】:
我有一本教程书,它首先使用代码构建 MVC API 应用程序。我想先使用数据库。当我运行对 api 的调用时,它在内部异常中告诉我它找不到“dbo.”。我怀疑 .dbo 是问题所在,如果它被丢弃(或者如果我在某处预先挂起)它会起作用,但我看不出在哪里更改代码来做到这一点。
这是我得到的全部错误,我上面提到的在 $id: "3" 中引用了
$id: "1", Message: "发生错误。", ExceptionMessage: "The 'ObjectContent
1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.", ExceptionType: "System.InvalidOperationException", StackTrace: null, InnerException: { $id: "2", Message: "An error has occurred.", ExceptionMessage: "An error occurred while executing the command definition. See the inner exception for details.", ExceptionType: "System.Data.Entity.Core.EntityCommandExecutionException", StackTrace: " at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) at System.Data.Entity.Core.Objects.ObjectQuery1.c__DisplayClass7.b__6() 在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectQuery1.c__DisplayClass7.b__5() 在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func1 operation) at System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery1..GetEnumerator>b__0() 在 System.Data.Entity.Internal.LazyEnumerator1.MoveNext() at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType) at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType) at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding) at System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding) at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content) at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()", InnerException: { $id: "3", Message: "An error has occurred.", **ExceptionMessage: "Invalid object name 'dbo.ContactType'."**, ExceptionType: "System.Data.SqlClient.SqlException", StackTrace: " at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection,Action1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource1 完成,Int32 超时,Task& 任务, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为) 在 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.b__c(DbCommand t, DbCommandInterceptionContext1 c) at System.Data.Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget 目标,Func3 operation, TInterceptionContext interceptionContext, Action3 执行,Action`3 执行)在 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand 命令,DbCommandInterceptionContext 拦截上下文)在 System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior 行为)在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为) 在 System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior 行为)"
DBContext.edmx
<EntityType Name="ContactType">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="ID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="Description" Type="varchar" MaxLength="50" Nullable="false" />
</EntityType>
DBContext.Context.cs
public virtual DbSet<ContactType> ContactType { get; set; }
public virtual int addContact(Nullable<int> contactTypeID, string emailAddress, string lastName, string firstName, string companyName, string phoneNumber1, string phoneNumber2, string comment)
{
var contactTypeIDParameter = contactTypeID.HasValue ?
new ObjectParameter("ContactTypeID", contactTypeID) :
new ObjectParameter("ContactTypeID", typeof(int));
var emailAddressParameter = emailAddress != null ?
new ObjectParameter("EmailAddress", emailAddress) :
new ObjectParameter("EmailAddress", typeof(string));
var lastNameParameter = lastName != null ?
new ObjectParameter("LastName", lastName) :
new ObjectParameter("LastName", typeof(string));
var firstNameParameter = firstName != null ?
new ObjectParameter("FirstName", firstName) :
new ObjectParameter("FirstName", typeof(string));
var companyNameParameter = companyName != null ?
new ObjectParameter("CompanyName", companyName) :
new ObjectParameter("CompanyName", typeof(string));
var phoneNumber1Parameter = phoneNumber1 != null ?
new ObjectParameter("PhoneNumber1", phoneNumber1) :
new ObjectParameter("PhoneNumber1", typeof(string));
var phoneNumber2Parameter = phoneNumber2 != null ?
new ObjectParameter("PhoneNumber2", phoneNumber2) :
new ObjectParameter("PhoneNumber2", typeof(string));
var commentParameter = comment != null ?
new ObjectParameter("Comment", comment) :
new ObjectParameter("Comment", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("addContact", contactTypeIDParameter, emailAddressParameter, lastNameParameter, firstNameParameter, companyNameParameter, phoneNumber1Parameter, phoneNumber2Parameter, commentParameter);
}
ContactType.cs
namespace AHT.Data
{
using System;
using System.Collections.Generic;
public partial class ContactType
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public ContactType()
{
this.Contact = new HashSet<Contact>();
}
public int ID { get; set; }
public string Description { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Contact> Contact { get; set; }
}
}
【问题讨论】:
-
你能发布你使用EntityFramework从数据库中获取这些数据的代码吗?发布此
ContactType和为您的 DbContext 生成的代码(特别是处理您的ContactType实体的部分)也会有所帮助。 -
我在底部添加了对原帖的引用
标签: c# .net sql-server entity-framework api