5

Я новичок в ASP.NET MVC и EF надеюсь, это не глупый вопросASP.NET MVC/Entity Framework Error - Неверное имя столбца «Environment_Id»

Когда я прохожу модель для просмотра я получаю this error - Сведения об исключении: System.Data.SqlClient.SqlException: Недопустимое имя столбца 'Environment_Id'.

Модель или таблица базы данных имеют свойство под этим именем. Может ли кто-нибудь направить меня на это?

**Here is the Version Model Class** 

    public partial class Version 
    { 
    public Version() 
    { 
     this.ProfileVersions = new List<ProfileVersion>(); 
     this.ServerInfoes = new List<ServerInfo>(); 
    } 

    public int Id { get; set; } 
    public string Number { get; set; } 
    public string Tag { get; set; } 
    public string Owner { get; set; } 
    public string Approver { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<ProfileVersion> ProfileVersions { get; set; } 
    public virtual ICollection<ServerInfo> ServerInfoes { get; set; } 
} 

**Profile Version Class** 

public partial class ProfileVersion 
{ 
    public ProfileVersion() 
    { 
     this.PlatformConfigurations = new List<PlatformConfiguration>(); 
    } 

    public int Id { get; set; } 
    public int ProfileId { get; set; } 
    public int EnvironmentId { get; set; } 
    public int VersionId { get; set; } 
    public Nullable<bool> Locked { get; set; } 
    public string LockedBy { get; set; } 
    public string Comments { get; set; } 
    public Nullable<int> Active { get; set; } 
    public virtual Environment Environment { get; set; } 
    public virtual ICollection<PlatformConfiguration> PlatformConfigurations { get; 
                      set; } 
    public virtual PlatformProfile PlatformProfile { get; set; } 
    public virtual Version Version { get; set; } 
} 

**ServerInfo** 
public partial class ServerInfo 
{ 
    public ServerInfo() 
    { 
     this.PlatformConfigurations = new List<PlatformConfiguration>(); 
    } 

    public int Id { get; set; } 
    public string ServerName { get; set; } 
    public int ProfileId { get; set; } 
    public int VersionId { get; set; } 
    public int EnvironmentId { get; set; } 
    public string ServerType { get; set; } 
    public Nullable<short> Active { get; set; } 
    public string Domain { get; set; } 
    public string Location { get; set; } 
    public string IP { get; set; } 
    public string Subnet { get; set; } 
    public string Gateway { get; set; } 
    public Nullable<int> VLan { get; set; } 
    public string DNS { get; set; } 
    public string OS { get; set; } 
    public string OSVersion { get; set; } 
    public string Func { get; set; } 
    public Nullable<short> IISInstalled { get; set; } 
    public string ADDomainController { get; set; } 
    public string ADOrganizationalUnit { get; set; } 
    public string ADGroups { get; set; } 
    public string LastError { get; set; } 
    public Nullable<System.DateTime> LastUpdate { get; set; } 
    public virtual Environment Environment { get; set; } 
    public virtual ICollection<PlatformConfiguration> PlatformConfigurations { get;  
                      set; } 
    public virtual PlatformProfile PlatformProfile { get; set; } 
    public virtual Version Version { get; set; } 
    public virtual VMConfiguration VMConfiguration { get; set; } 
} 

**Controller Code-** 

public ViewResult Index(string id) 
    { 

     var profileVerList = from ver in _context.Versions 
           where !(from pfv in _context.ProfileVersions 
            select pfv.VersionId).Contains(ver.Id) 
           select ver; 

     var bigView = new BigViewModel 
     { 
      VersionModel = profileVerList.ToList(),     
     }; 

     return View(model: bigView); 
    } 


**In the View where the exception is thrown** 

@Html.DropDownList(
      "SelectedVersionID", 
      new SelectList(
       Model.VersionModel.Select(x => new { Value = x.Id, Text = x.Number}), 
       "Value", 
       "Text" 
       ) 
      ) 
+1

Имеет ли свойство ProfileVersion или ServerInfo свойство Environment? –

+0

Да - они публичные int EnvironmentId {get; задавать; } @Olav Nybø – user2696668

+0

.... @ Olav Nybø – user2696668

ответ

10

В ваших ProfileVersion и ServerInfo образований у вас есть Environment свойство навигации. По умолчанию Entity Framework попытается создать столбец базы данных с именем [Property Name]_[Referenced class PK]. В вашем сценарии это Environment_Id. Проблема в том, что вы не сделали миграции, чтобы создать этот столбец базы данных.

Если бы я должен был представить себе, что здесь произошло, я бы сказал, что первым создал классы с EnvironmentId свойствами, мигрировали, а потом решили добавить навигационные свойства, Environment каждому, ожидая EF, чтобы связать, что с существующими EnvironmentId свойства. Вот где вы поступили не так. Как я уже говорил выше, EF конвенция искать столбец базы данных с именем Environment_Id, поэтому если вы хотите EF использовать EnvironmentId вместо этого, вы просто должны сказать это так, с аннотацией ForeignKey данных:

[ForeignKey("Environment")] 
public int EnvironmentId { get; set; } 
+0

Я добавил данные о внешних ключах для свойства EnvironmentId в ProfileVersion и ServeInfo, но все еще имею ту же проблему. @ Chris Pratt – user2696668

+0

Является ли столбец 'EnvironmentId' в вашей таблице задан как внешний ключ в базе данных уровень? –

0

В моем случае Я добавил Мое основное отношение к одному и тому же ключу. Я просто удалил ..

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