Ich bin ziemlich neu in C# und Visual Studio MVC und arbeite an einem einfachen Projekt, bei dem ich eine Seite mit Kommentaren implementieren muss, die über ein Formular (das ich noch nicht implementiert habe) gepostet werden kann. . Hier ist mein Problem, ich bekomme immer den Fehler 'ungültige Spalten-ID'. Ich habe alle Antworten im Internet nachgeschaut, aber nichts gefunden, was mein Problem korrigiert hat. Ich komme aus Java, also sind mir einige Konzepte nicht wirklich klar, besonders seit ich gestern angefangen habe.Ungültiger Spaltenname C#
Hier ist mein Kontext:
namespace MonLivredor.Models {
public class CommentaireContext: DbContext {
public CommentaireContext() {}
public IDbSet <Commentaire> Liste {
get;
set;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
Database.SetInitializer <CommentaireContext> (null);
base.OnModelCreating(modelBuilder);
}
}
}
Und hier mein Controller:
using MonLivredor.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MonLivredor.Controllers
{
public class CommentaireController : Controller
{
private CommentaireContext context = new CommentaireContext();
// GET: Commentaire
public ActionResult Commentaire()
{
Commentaire com1 = new Commentaire("Jacky", "[email protected]", "Bonjour je m'apelle Jacky et j'aime le C#");
Commentaire com2 = new Commentaire("Bobby", "[email protected]", "Bonjour je m'apelle Bobby et je deteste le Java");
if (context.Liste.Count() == 0)
{
context.Liste.Add(com1);
context.Liste.Add(com2);
context.SaveChanges();
return View(context);
}
else
{
return View(context);
}
}
Modell:
namespace MonLivredor.Models
{
[Table("Commentaires")]
public class Commentaire
{
[Key]
public int ID { get; set; }
[Required]
public String Nom { get; set; }
public String Mail { get; set; }
public String Message { get; set; }
public DateTime date;
public int i = 0;
public Commentaire(String nom, String mail, String message)
{
date = DateTime.Now;
this.Nom = nom;
this.Mail = mail;
this.Message = message;
ID = i;
i++;
}
public Commentaire()
{
date = DateTime.Now;
}
}
}
Meiner Ansicht nach um die Nachrichten zu sehen, ich will nur in der Lage sein:
@model MonLivredor.Models.CommentaireContext
<h1>Commentaires</h1>
<tr>
@foreach (var com in Model.Liste)
{
<td>
<a href="mailto:com.Mail">@com.Nom @com.date</a>
<p>@com.Message</p>
</td>
}
</tr>
Entschuldigung für den unordentlichen Code, ich habe mir die Haare ausgerissen, und die Antwort ist wahrscheinlich albern. Wenn ich den Fehler, werde ich auf die Ansichtsseite auf der Linie umgeleitet:
@foreach (var com in Model.Liste)
mit dem Fehler ‚ungültige Spaltennamen-ID‘.
Stapelüberwachung:
[SqlException (0x80131904): Invalid column name 'ID'.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +2442126
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5736904
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +628
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +3731
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +58
System.Data.SqlClient.SqlDataReader.get_MetaData() +89
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +379
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2026
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +375
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +240
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41
System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +12
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext`1 c) +9
System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +72
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext) +356
System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior) +166
System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +12
System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +37
[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]
System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +112
System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +744
System.Data.Entity.Core.Objects.<>c__DisplayClass7.<GetResults>b__6() +97
System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction(Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) +288
System.Data.Entity.Core.Objects.<>c__DisplayClass7.<GetResults>b__5() +154
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func`1 operation) +189
System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +279
System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() +11
System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() +45
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
MonLivredor.Controllers.CommentaireController.Commentaire() in C:\Users\Bob\documents\visual studio 2015\Projects\MonLivredor\MonLivredor\Controllers\CommentaireController.cs:26
lambda_method(Closure , ControllerBase , Object[]) +62
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +157
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9744373
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
Danke für Ihre Hilfe
Wie sieht die 'Commentaires' Datenbanktabelle aus? Es wird erwartet, dass die Spalte "ID" dort vorhanden ist. –
Ich habe keinen erstellt, also ist das vielleicht das Problem ... Unser Lehrer hat uns Schritt für Schritt erklärt, ohne eine Datenbank zu erstellen, und einige meiner Kollegen haben es ohne Datenbankerstellung geschafft. –
Es sieht so aus, als ob Sie versuchen, eine Identitäts-/Autonummerspalte manuell zu implementieren. Tu das nicht (wenn du das mit "i" versuchst) –