2016-07-29 8 views
0

I現在Azureのモバイルアプリをしようと、このブログに続く:
https://shellmonger.com/2016/05/11/30-days-of-zumo-v2-azure-mobile-apps-day-19-asp-net-table-controllers/
私はPOSTMAN
から.../tables/Studentを実行したとき、私は、データを取得することはできませんしかし、私は、デフォルトのTodoItemテーブルままでしたが変わらない。
これをどのように修正する必要がありますか、何が間違っていましたか?もう詳細が必要な場合はお知らせください。おかげAzureのモバイルアプリのテストは、エラー(/テーブル/学生)を返さ

モデル/ elliotAndroidQuickStartContext.cs

public class elliotAndroidQuickStartContext : DbContext 
    { 
     private const string connectionStringName = "Name=MS_TableConnectionString"; 

     public elliotAndroidQuickStartContext() : base(connectionStringName) 
     { 
     } 

     public DbSet<TodoItem> TodoItems { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.HasDefaultSchema("mobile"); 
      modelBuilder.Conventions.Add(
       new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(
        "ServiceTableColumn", (property, attributes) => attributes.Single().ColumnType.ToString())); 
     } 

     public DbSet<Student> Students { get; set; } 
    } 

のDataObject/Student.cs

//[Table("Student", Schema = "mobile")] 
    public class Student : EntityData 
    { 
     public string UserId { get; set; } 

     public string Title { get; set; } 

     public bool Complete { get; set; } 

     // When asked for the string representation, return the JSON 
     public override string ToString() 
     { 
      return JsonConvert.SerializeObject(this); 
     } 
    } 

コントローラ/ StudentController.cs

public class StudentController : TableController<Student> 
    { 
     protected override void Initialize(HttpControllerContext controllerContext) 
     { 
      base.Initialize(controllerContext); 
      elliotAndroidQuickStartContext context = new elliotAndroidQuickStartContext(); 
      DomainManager = new EntityDomainManager<Student>(context, Request); 
     } 

     // GET tables/Student 
     public IQueryable<Student> GetAllStudent() 
     { 
      return Query(); 
     } 

     // GET tables/Student/48D68C86-6EA6-4C25-AA33-223FC9A27959 
     public SingleResult<Student> GetStudent(string id) 
     { 
      return Lookup(id); 
     } 

     // PATCH tables/Student/48D68C86-6EA6-4C25-AA33-223FC9A27959 
     public Task<Student> PatchStudent(string id, Delta<Student> patch) 
     { 
      return UpdateAsync(id, patch); 
     } 

     // POST tables/Student 
     public async Task<IHttpActionResult> PostStudent(Student item) 
     { 
      Student current = await InsertAsync(item); 
      return CreatedAtRoute("Tables", new { id = current.Id }, current); 
     } 

     // DELETE tables/Student/48D68C86-6EA6-4C25-AA33-223FC9A27959 
     public Task DeleteStudent(string id) 
     { 
      return DeleteAsync(id); 
     } 
    } 

App_Start/Startup.MobileApp.cs

public partial class Startup 
    { 
     public static void ConfigureMobileApp(IAppBuilder app) 
     { 
      HttpConfiguration config = new HttpConfiguration(); 

      config.EnableSystemDiagnosticsTracing(); 

      new MobileAppConfiguration() 
       .AddTables(
        new MobileAppTableConfiguration() 
         .MapTableControllers() 
         .AddEntityFramework()) 
       .MapApiControllers() 
       .ApplyTo(config); 

      Database.SetInitializer<elliotAndroidQuickStartContext>(null); 

      app.UseWebApi(config); 

      MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings(); 

      if (string.IsNullOrEmpty(settings.HostName)) 
      { 
       // This middleware is intended to be used locally for debugging. By default, HostName will 
       // only have a value when running in an App Service application. 
       app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions 
       { 
        SigningKey = ConfigurationManager.AppSettings["SigningKey"], 
        ValidAudiences = new[] { ConfigurationManager.AppSettings["ValidAudience"] }, 
        ValidIssuers = new[] { ConfigurationManager.AppSettings["ValidIssuer"] }, 
        TokenHandler = config.GetAppServiceTokenHandler() 
       }); 
      } 
     } 
    } 

http://localhost:59996/tables/Student

{ 
    "message": "An error has occurred.", 
    "exceptionMessage": "Exception has been thrown by the target of an invocation.", 
    "exceptionType": "System.Reflection.TargetInvocationException", 
    "stackTrace": " at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)\r\n at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)\r\n at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n at System.Web.Http.OData.Query.ODataQueryOptions.LimitResults(IQueryable queryable, Int32 limit, Boolean& resultsLimited)\r\n at System.Web.Http.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, ODataQuerySettings querySettings)\r\n at System.Web.Http.OData.EnableQueryAttribute.ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)\r\n at System.Web.Http.OData.EnableQueryAttribute.ExecuteQuery(Object response, HttpRequestMessage request, HttpActionDescriptor actionDescriptor)\r\n at System.Web.Http.OData.EnableQueryAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n at System.Web.Http.Filters.ActionFilterAttribute.OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Tracing.Tracers.ActionFilterAttributeTracer.<>c__DisplayClass4.<<OnActionExecutedAsyncCore>b__1>d__6.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Tracing.ITraceWriterExtensions.<TraceBeginEndAsyncCore>d__24.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Tracing.Tracers.HttpControllerTracer.<ExecuteAsyncCore>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Tracing.ITraceWriterExtensions.<TraceBeginEndAsyncCore>d__18`1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()", 
    "innerException": { 
    "message": "An error has occurred.", 
    "exceptionMessage": "The underlying provider failed on Open.", 
    "exceptionType": "System.Data.Entity.Core.EntityException", 
    "stackTrace": " at System.Data.Entity.Core.EntityClient.EntityConnection.Open()\r\n at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)\r\n at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)\r\n at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()\r\n at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)\r\n at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)\r\n at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()\r\n at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()\r\n at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n at System.Web.Http.OData.Query.TruncatedCollection`1..ctor(IQueryable`1 source, Int32 pageSize)\r\n at System.Web.Http.OData.Query.ODataQueryOptions.LimitResults[T](IQueryable`1 queryable, Int32 limit, Boolean& resultsLimited)", 
    "innerException": { 
     "message": "An error has occurred.", 
     "exceptionMessage": "Cannot attach the file 'D:\\VisualStudio_Project_Location\\elliotAndroidQuickStart_Runtime\\elliotAndroidQuickStartService\\App_Data\\aspnet-elliotAndroidQuickStartService-20160620055432.mdf' as database 'aspnet-elliotAndroidQuickStartService-20160620055432'.", 
     "exceptionType": "System.Data.SqlClient.SqlException", 
     "stackTrace": " at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)\r\n at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)\r\n at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)\r\n at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)\r\n at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)\r\n at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)\r\n at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)\r\n at System.Data.SqlClient.SqlConnection.Open()\r\n at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<Open>b__36(DbConnection t, DbConnectionInterceptionContext c)\r\n at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)\r\n at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext)\r\n at System.Data.Entity.Core.EntityClient.EntityConnection.<Open>b__2()\r\n at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()\r\n at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)\r\n at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)\r\n at System.Data.Entity.Core.EntityClient.EntityConnection.Open()" 
    } 
    } 
} 

答えて

0

私は2番目のモデルを追加するときは、Entity Frameworkのコードファーストの移行をしなかったと思われます。データベースは、移行を行うときにのみ更新されます。 http://www.entityframeworktutorial.net/code-first/migration-in-code-first.aspx

+0

私もあなたがブログでやったSQLスクリプトを書いた、私はまだEFの移行を行う必要がありますか? @アドリアンホール –

関連する問題