0

Я создал контроллер, использующий структуру сущности, он дал ошибку Я прокомментировал атрибут HttpPostedFileBase из приведенного ниже класса и попытался снова, он работал и все представления CRUD были сгенерированы. Теперь, когда я пытаюсь добавить новую станцию, используя следующий код:ModelValidationException - MVC Codefirst

[HttpPost] 
    [ValidateAntiForgeryToken] 
    [AllowAnonymous] 
    public ActionResult Create(Station station) 
    { 
     station.FileName = station.File.FileName; 
     station.ImageSize = station.File.ContentLength; 
     byte[] data = new byte[station.File.ContentLength]; 
     station.File.InputStream.Read(data, 0, station.File.ContentLength); 
     station.ImageData = data; 

      db.Stations.Add(station); 
      db.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 

это дает исключение (как показано ниже):

System.Data.Entity.ModelConfiguration.ModelValidationException был необработанное пользователем код HResult = -2146233088 = Сообщение было обнаружено одно или несколько ошибки проверки в процессе генерации модели:

MetroTrain.Models.HttpPostedFileBase:: EntityType 'HttpPostedFileBase' не имеет ключа, определенный. Определите ключ для этого EntityType. HttpPostedFileBases: EntityType: EntitySet «HttpPostedFileBases» основан на типе «HttpPostedFileBase», который имеет , никаких ключей не определено.

Источник = EntityFramework StackTrace: в System.Data.Entity.Core.Metadata.Edm.EdmModel.Validate() в System.Data.Entity.DbModelBuilder.Build (DbProviderManifest providerManifest, DbProviderInfo providerInfo) в системе. Data.Entity.DbModelBuilder.Build (DbConnection providerConnection) на System.Data.Entity.Internal.LazyInternalContext.CreateModel (LazyInternalContext internalContext) на System.Data.Entity.Internal.RetryLazy 2.GetValue(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() at System.Data.Entity.Internal.InternalContext.Initialize() at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() в системе. Data.Entity.Internal.Linq.InternalSet 1.get_InternalContext() at System.Data.Entity.Internal.Linq.InternalSet 1.ActOnSet (действие, EntityState newState, объект объекта, S Tring имяМетода) на System.Data.Entity.Internal.Linq.InternalSet 1.Add(Object entity) at System.Data.Entity.DbSet 1.Add (TEntity лица) на MetroTrain.Controllers.StationsController.Create (станция) в C: \ Users \ ghousia ПК \ Desktop \ MetroTrain \ MetroTrain \ Контроллеры \ StationsController.cs: линия на lambda_method (Закрытие, ControllerBase, Object []) на System.Web.Mvc.ActionMethodDispatcher.Execute (контроллер ControllerBase, Object [] параметры) на System.Web. Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary параметров) в System.Web.Mvc.Async.AsyncControllerActionInvoker.ActionInvocation.InvokeSynchronousActio nMethod() в System.Web.Mvc.Async.AsyncControllerActionInvoker.b__36 (IAsyncResult AsyncResult, ActionInvocation innerInvokeState) на System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.End() в System.Web.Mvc .Async.AsyncResultWrapper.End [TResult] (IAsyncResult AsyncResult, метка объекта) на System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod (IAsyncResult AsyncResult) в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3c() в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters. <> c__DisplayClass45.b__3e() InnerException:

Класс используется (для строительных лесов):

public class Station 
    { 
     [Key] 
     public int Id { get; set; } 
     [Display(Name="Station Name")] 
     public string StationName { get; set; } 
     public double Distance { get; set; } 
     [DataType(DataType.PhoneNumber)] 
     public string Mobile { get; set; } 
     [DataType(DataType.Date)] 
     public DateTime Opening { get; set; } 
     public string Connections { get; set; } 
     public string Layout { get; set; } 
     [Display(Name="Tourists Place")] 
     public string TouristsPlace { get; set; } 
     [Display(Name = "Tourists Place Image")] 
     ///////// 
     public int ImageId { get; set; } 
     public Nullable<int> ImageSize { get; set; } 
     public string FileName { get; set; } 
     public byte[] ImageData { get; set; } 

     [Required(ErrorMessage = "Please select file")] 
     public HttpPostedFileBase File { get; set; } 
     /// <summary> 
     /// //// 
     /// </summary> 
     [Display(Name="Line Color")] 
     public string LineColor { get; set; } 
    } 
+2

Вы не можете и не должны сохранить объект 'HttpPostedFileBase' в хранилище данных, ошибка сама за себя, он говорит, что не может сохранить его как их нет' Key' не определено на нем. Вы должны создать свой собственный 'Entity', чтобы хранить детали' HttpPostedFileBase', которые вам нравятся. – 3dd

+0

Спасибо. Говорить то же самое с помощью кода было бы очень полезно. –

ответ

1

Обязательно добавьте атрибут [NotMapped] как это.

[NotMapped] 
public HttpPostedFileBase File { get; set; } 
+0

Но я хочу сохранить изображение в базе данных. –

Смежные вопросы