2014-09-13 6 views
3

J'essaie d'étendre un premier modèle de code EF 6 et j'obtiens une erreur. J'ai cherché et ne peux pas trouver beaucoup d'informations sur la question. J'ai créé une classe partielle du même nom que mon modèle dans le même espace de noms. Voici mon modèle et l'extension:Comment étendre un modèle Entity Framework 6

Modèle -

namespace DataAccess.Models 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using System.Data.Entity.Spatial; 

    [Table("Vehicle")] 
    public partial class Vehicle 
    { 
     public Vehicle() 
     { 
      WorkOrders = new HashSet<WorkOrder>(); 
     } 

     public int VehicleID { get; set; } 

     public int CustomerID { get; set; } 

     [StringLength(17)] 
     public string VIN { get; set; } 

     public int Mileage { get; set; } 

     [StringLength(4)] 
     public string Year { get; set; } 

     [StringLength(50)] 
     public string Make { get; set; } 

     [StringLength(50)] 
     public string Model { get; set; } 

     [StringLength(50)] 
     public string Engine { get; set; } 

     [StringLength(50)] 
     public string BodyStyle { get; set; } 

     [StringLength(50)] 
     public string Transmission { get; set; } 

     [StringLength(50)] 
     public string Trim { get; set; } 

     [StringLength(50)] 
     public string Origin { get; set; } 

     public bool IsDeleted { get; set; } 

     [StringLength(25)] 
     public string License { get; set; } 

     public bool? Is4WD { get; set; } 

     [StringLength(25)] 
     public string Color { get; set; } 

     public string Notes { get; set; } 

     [StringLength(2)] 
     public string LicenseState { get; set; } 

     public virtual Customer Customer { get; set; } 

     public virtual ICollection<WorkOrder> WorkOrders { get; set; } 
    } 
} 

Extension -

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace DataAccess.Models 
{ 
    public partial class Vehicle 
    { 
     public string CustomerName { get; set; } 
    } 
} 

L'erreur que je reçois est:

{ "La modèle qui soutient le contexte 'AiContext' a changé depuis La base de données a été créée. Pensez à l'aide du code premières migrations de mettre à jour la base de données (http://go.microsoft.com/fwlink/?LinkId=238269) "}

Je reçois cette erreur lorsque vous essayez d'appeler une procédure stockée Plus précisément, il est jeté sur cette ligne:..

using (ObjectContext objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dbContext).ObjectContext) 

de cette méthode:..

public List<Vehicle> SearchVehicles(string vin, 
              string license, 
              string year, 
              string make, 
              string model) 
     { 
      SqlParameter vinParameter; 
      if (vin != null) 
      { 
       vinParameter = new SqlParameter("vin", vin); 
      } 
      else 
      { 
       vinParameter = new SqlParameter("vin", ""); 
      } 

      SqlParameter licenseParameter; 
      if (license != null) 
      { 
       licenseParameter = new SqlParameter("license", license); 
      } 
      else 
      { 
       licenseParameter = new SqlParameter("license", ""); 
      } 

      SqlParameter yearParameter; 
      if (year != null) 
      { 
       yearParameter = new SqlParameter("year", year); 
      } 
      else 
      { 
       yearParameter = new SqlParameter("year", ""); 
      } 

      SqlParameter makeParameter; 
      if (make != null) 
      { 
       makeParameter = new SqlParameter("make", make); 
      } 
      else 
      { 
       makeParameter = new SqlParameter("make", ""); 
      } 

      SqlParameter modelParameter; 
      if (model != null) 
      { 
       modelParameter = new SqlParameter("model", model); 
      } 
      else 
      { 
       modelParameter = new SqlParameter("model", ""); 
      } 

      using (AiContext dbContext = new AiContext()) 
      { 
       using (ObjectContext objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dbContext).ObjectContext) 
       { 
        return objectContext.ExecuteStoreQuery<Vehicle>("SearchVehicles @VIN, " + 
                    "@License, @Year, " + 
                    "@Make, @Model", 
                    vinParameter, 
                    licenseParameter, 
                    yearParameter, 
                    makeParameter, 
                    modelParameter).ToList(); 
       } 
      } 
     } 

Je connais bien l'erreur EF pense évidemment, je l'ai fait un changement au modèle et veut mettre à jour la base de données une y des idées sur pourquoi je reçois cette erreur ou un autre moyen d'étendre un modèle pour ajouter des propriétés ou une logique métier? Merci pour l'aide à l'avance.

Répondre

4

Si vous l'utilisez uniquement dans la logique métier et non pour le mapper en tant que colonne dans la base de données. Vous devez ajouter l'attribut [NotMapped].

[NotMapped] 
public string CustomerName { get; set; } 
+0

Wow! C'est simple? Mais, oui, j'ai testé et ça l'a réparé. Je parie que j'ai googlé pendant une heure et lu trois articles et n'a pas pu trouver cette solution. Merci beaucoup. Une question ... est-il nécessaire d'ajouter le même attribut aux méthodes? – flyNflip

+0

uniquement les propriétés publiques qui doivent être marquées comme 'NotMapped'. –

+1

Great! Merci de partager votre savoir. – flyNflip

Questions connexes