Как использовать первые модели кода EF для использования отношений для генерации данных - PullRequest
1 голос
/ 09 мая 2011

У меня есть две модели предметной области в моем проекте: категория и подкатегория.Это мое отношение один ко многим и как я его создал:

public class Category
{
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }

    public List<SubCategory> SubCategories { get; set; }
}

public class SubCategory
{
    public int SubCategoryId { get; set; }
    public string SubCategoryName { get; set; }

    public Category Category { get; set; }
}

Теперь я не уверен, как добавить подкатегорию в категорию, но я хочу, чтобы связь сохранялась для каждой подкатегории.Категории в категории.Поэтому я попытался передать категорию в представление CreateSubCategory

public ActionResult CreateSubCategory(int categoryId)
{
    return View(_service.GetCategory(categoryId));
}

Я пришел сюда с моей точки зрения и получил тупик

@using (Html.BeginForm()){
    <h2>SubCategory</h2>

    <div>@Html.DisplayFor(model => model.CategoryName)</div>

    <div>@*Want to create Sub-category here*@</div>

    <p><input type="submit" value="Create" /></p>
}

Я думаю, это вопрос нуб, но я не могу понятьчто тут делать.Так есть ли какой-нибудь совет о том, как это сделать, или какой-либо способ выполнения этой задачи по добавлению моих подкатегорий в категории?

Ответы [ 3 ]

1 голос
/ 10 мая 2011

Прежде всего, добавьте ключевое слово virtual.

public class Category
{
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }

    public virtual ICollection<SubCategory> SubCategories { get; set; }
}

// добавьте сюда конструктор для категории и установите SubCatogories в новый HashSet ();

public class SubCategory
{
    public int SubCategoryId { get; set; }
    public string SubCategoryName { get; set; }
    public int CategoryId { get; set; }// add this:)

    public virtual Category Category { get; set; }
}

теперь естьдва способа добавить подкатегорию;либо получите экземпляр категории, а затем добавьте экземпляр подкатегории в свою коллекцию подкатегорий, либо создайте новую подкатегорию и задайте ее поля, включая CategoryId, а затем добавьте его в соответствующий DbSet.

0 голосов
/ 08 июля 2012

Может быть проще использовать модель одного домена, особенно если подкатегории могут иметь свои собственные подкатегории:

public class Category
{
    public int CategoryId { get; set; }

    public string Name { get; set; }

    public virtual Category ParentCategory { get; set; }

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

Затем настройте отношение в методе OnModelCreating:

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

    modelBuilder.Entity<Category>()
        .HasMany(x => x.ChildCategories)
        .WithOptional(x => x.ParentCategory);

}

Чтобы создать новую подкатегорию, просто создайте новую категорию и установите ее ParentCategory перед отправкой подкатегории в ваше представление.

0 голосов
/ 12 мая 2011

Если вы создаете SubCategory, вы должны передать объект SubCategory (или SubCategoryViewModel) в качестве модели для вашего вида.

Вы можете создать новый экземпляр SubCategory в своем методе CreateSubCategory() и назначить CategoryId новому объекту (как указано hazimdikenli ). Обязательно сохраните идентификатор, используя @Html.HiddenFor(m => m.CategoryId), чтобы он сохранялся для возвращаемого метода Post.

public ActionResult CreateSubCategory(int categoryId)
{
    SubCategory model = new SubCategory();
    model.CategoryId = categoryId;
    return View(model);
}

Когда объект публикуется обратно, это точка, в которой вы фиксируете базу данных, сохраняя новый объект и создавая связь с родительским объектом Category (через ссылку Id).

Если вы хотите передать CategoryName, вам, вероятно, следует создать модель представления со строковым свойством CategoryName (это, конечно, необходимо заполнить методом CreateSubCategory())

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