Entity Framework Code First Добавление нулевого значения для столбца id - PullRequest
0 голосов
/ 13 июля 2011

Сначала я использую код Entity Framework и ASP.NET MVC 3.

Определен следующий контекст:

public class PbeContext : DbContext
{
     public DbSet<Category> Categories { get; set; }

     protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
     {
          dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
     }
}

Класс моей категории:

public class Category
{
     public int Id { get; set; }
     public string Name { get; set; }
     public string Description { get; set; }
     public string MetaKeywords { get; set; }
     public string MetaDescription { get; set; }
     public bool IsActive { get; set; }
     public Category ParentCategory { get; set; }
     public int ParentCategoryId { get; set; }
}

ParentCategoryId в моем Category table - это внешний ключ, который связан со столбцом Id (Category Id).

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

Как я обычно делал это в прошлом, если пользователь не выбирает родительскую категорию из выпадающего списка, тогда я бы сделалParentCategoryId в моей Category таблице NULL.В настоящее время он пытается добавить 0 к таблице и терпит неудачу, потому что нет категории с идентификатором 0. И все еще рекомендуется добавлять его в качестве значения NULL, если родительская категория не выбрана?Если да, то как мне сначала это сделать, используя код Entity Framework?

EDIT

Я изменил int в моей модели представления и классе Category на nullable, как было предложено.

public class CreateCategoryViewModel
{
    public CreateCategoryViewModel()
    {
        IsActive = true;
    }

     public string Name { get; set; }
     public string Description { get; set; }
     public string MetaKeywords { get; set; }
     public string MetaDescription { get; set; }
     public bool IsActive { get; set; }
     public SelectList ParentCategoriesSelectList { get; set; }
     public int? ParentCategoryId { get; set; }
}

Мой обновленный класс категории:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string MetaKeywords { get; set; }
    public string MetaDescription { get; set; }
    public bool IsActive { get; set; }
    public int? ParentCategoryId { get; set; }
}

В моем раскрывающемся списке есть опция по умолчанию "- Выбрать -" со значением 0. Когда я нажимаю, отправьте ParentCategoryId вмодель представления равна 0. Я сопоставляю ее с классом категории, а ParentCategoryId по-прежнему равен нулю.Когда и как это преобразуется в NULL?Ошибка, которую я все еще получаю:

The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraint "FK_Category_Category". The conflict occurred in database "ProgrammingByExample", table "dbo.Category", column 'Id'.
The statement has been terminated.

1 Ответ

1 голос
/ 13 июля 2011

Сделать ParentCategoryId обнуляемым

public class Category
{
     public int Id { get; set; }
     public string Name { get; set; }
     public string Description { get; set; }
     public string MetaKeywords { get; set; }
     public string MetaDescription { get; set; }
     public bool IsActive { get; set; }
     public Category ParentCategory { get; set; }
     public int? ParentCategoryId { get; set; }
}

Редактировать

В моем раскрывающемся списке есть опция "- Выбрать -" по умолчанию со значением 0

Опция по умолчанию не должна иметь значение (вы поставили 0) Например:

@Html.DropDownFor(model => model.ParentCategoryId, 
    (SelectList)ViewBag.ParentCategories, "-- Select --")
...