Code First с существующей базой данных - PullRequest
1 голос
/ 28 сентября 2011

У меня есть таблица в базе данных, которая указывает на себя, т.е. parent_id >> ID категории.Это диаграмма ER ER Diagram

Я смоделировал эту таблицу, как показано ниже, но она дает * Ошибка: «Категория»: имена членов не могут совпадать с их типом включения :

public class Category
{
    [Key]
    public int category_id { get; set; }
    public string category_name { get; set; }
    public int category_parent { get; set; }
    public string category_desc { get; set; }

    public virtual Category Category { get; set; }
}

Как мне моделировать такие таблицы?

Ответы [ 3 ]

2 голосов
/ 28 сентября 2011

Вы должны сделать category_parent обнуляемым и настроить навигационное свойство Category на скалярное свойство category_parent.Попробуйте использовать правильные соглашения об именах.

public class Category
{
    [Key]
    [Column("category_id")]
    public int Id { get; set; }

    [Column("category_name")]
    public string Name { get; set; }

    [Column("category_parent")]
    public int? ParentId { get; set; }

    [Column("category_desc")]
    public string Description { get; set; }

    [ForeignKey("ParentId")]
    public virtual Category ParentCategory { get; set; }
}
1 голос
/ 28 сентября 2011
public class Category
{
    [Key]
    public int category_id { get; set; }
    public string category_name { get; set; }
    public int category_parent { get; set; }
    public string category_desc { get; set; }

    public int parent_category_id { get; set; } <-- ADD & setup as foreign key
    public virtual Category ParentCategory { get; set; } <-- Change name

    public virtual ICollection<Category> Categories { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Category>.HasMany(cat => cat.Categories)
            .WithRequired()
            .HasForeignKey(cat => cat.parent_category_id);        
}
1 голос
/ 28 сентября 2011

Я думаю, вам просто нужно изменить имя свойства Category на другое, чтобы оно не совпадало с именем класса ...

public virtual Category SubCategory { get; set; }

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