MVC 3, C # - неверное имя столбца, сгенерированное кодом - PullRequest
1 голос
/ 17 декабря 2011

Я новичок в asp.net C # и пытаюсь учиться, создав простое веб-приложение на основе приложения MVC 3 Music. До сих пор у меня была приличная пробежка, но я сталкиваюсь с этим и не могу понять причину. Пожалуйста, помогите

Я создаю простой веб-сайт, на котором перечислены проекты, затем нажимая на проекты, вы видите все таблицы, а затем нажимая на таблицу, вы видите все столбцы. Проекты / таблицы / столбцы извлекаются из базы данных SQL, в которой определены допустимые данные и ключи PK / FK. Я могу переходить от проектов к таблицам и видеть все столбцы в таблицах, но когда я нажимаю на ссылку столбца, я получаю сообщение об ошибке, как описано ниже.

ОШИБКА: "Неверное имя столбца 'Tables_Id'." Профилировщик SQL показывает этот столбец в запросе, но я не понимаю, откуда он, поскольку у меня нет такого столбца.

КЛАСС КОНТРОЛЛЕРА

public class ProjectController : Controller  // Inherit from base class Controller
{
    DbEntities storeDB = new DbEntities();   //Create Object/instance of class //StorDB is  reference to an object

    public ActionResult Index()
    {
        var Name = storeDB.ProjectNM.ToList(); //Use 'var' coz we may have any type returned, 'var' is determined at run time
        return View(Name); 
    }

    public ActionResult BrowseTables(string Projects) 
    {
        var ProjectModel = storeDB.ProjectNM.Include ("Tabless")
        .Single(g => g.Name == Projects);

        return View(ProjectModel);
    }

    public ActionResult BrowseColumns(string TableIs)
    {
        var ProjectModel1 = storeDB.TableNM.Include("Columnss")
        .Single(g => g.Tbl_Name == TableIs);

        return View(ProjectModel1);

        //var ColumnModel = storeDB.TableNM.Find(TableIs);
       // return View(ColumnModel);

    }
}

Другие классы

public partial class Projects //Partial class, see comment below
{
    public int Id { get; set; }
    public string Name { get; set; }

    public List<Tables> Tabless { get; set; }  //Navigation Property, required so that we can include tables under projects

}

public class Tables
{
    public int Id { get; set; }
    public int ProjectId { get; set; }
    public string Tbl_Name { get; set; }
    public Projects Project { get; set; }   //Class table can have (belong) only one project

    public List<Columns> Columnss { get; set; } //Table can have more than one column
  }

 public class Columns
{
    public int Id { get; set; }
    [ForeignKey("Tables")] 
    public int TblId { get; set; }
    public string Column_Name { get; set; }
    public string IncludeFlag { get; set; }
  }

Просмотр

<ul> 
@foreach (var Tables in Model.Tabless) 
{ 
    <li> 
      @Html.ActionLink(Tables.Tbl_Name, "BrowseColumns", new { TableIs = Tables.Tbl_Name }) 
    </li> 
} 


Запрос из профилировщика SQL

[Project2].[Tables_Id] AS [Tables_Id]

Как видите, в запросе есть столбец [Tables_Id], и я не понимаю, почему он существует, поскольку у меня нет такого столбца. Пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 17 декабря 2011

Для EF4.1 и внешних ключей принято называть их {TableName}_{ColumnName}, поэтому ваш внешний ключ для таблиц ожидает имена столбцов Table_Id (потому что Table - это имя таблицы, а Id - имяКолонка PK.

Это может помочь: EF 4.1 все испортило. Изменилась ли стратегия именования FK?

2 голосов
/ 17 декабря 2011

По сути, MVC3 и EF4 делают много вещей по соглашению.

Мое предложение немного прояснить ситуацию немного читается в EF 4.1, и пусть он множит ваши имена таблиц,и использовать аннотации данных (или сопоставление свойств, если вам не нравятся атрибуты в вашей модели), чтобы пометить свойства Id вашего объекта ...

Это не обязательно является причиной вашей проблемы, но я думаю, что вывам будет намного легче увидеть, что происходит в вашем профилировщике и моделях, когда имена / значения имеют более логичный смысл.

Начните с выделения объектов: таблицы, столбца и т. д. или даже с использованием болееописательное имя ... опять же, если по какой-либо другой причине вам будет легче читать и отлаживать, или даже получить лучшие ответы здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...