Сначала я использую код 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.