Создайте запись, где Модель наследуется от другой Модели. - PullRequest
0 голосов
/ 06 июня 2009

Как правильно установить свойство ссылки на модель?

У меня есть модель с именем Platform, которая имеет навигационное свойство для модели с именем Service.

У меня проблема с настройкой значения platformToCreate.Service.

Вот скриншот таблицы Platform:

альтернативный текст http://img268.imageshack.us/img268/6394/platform.jpg

Вот скриншот EDM:

альтернативный текст http://img19.imageshack.us/img19/3664/edms.jpg

Код:

[ValidateInput(true)]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create([Bind(Exclude = "id")] Platform platformToCreate)
        {

            ViewData["title"] = platformToCreate.title;
            ViewData["url"] = platformToCreate.url;
            ViewData["platform_nm"] = platformToCreate.platform_nm;
            ViewData["enabled"] = platformToCreate.enabled;

            int selectedService = int.Parse(Request.Form["service_id"].ToString());

            var cats = from c in db.Services select c;
            ViewData["service_id"] = new SelectList(cats, "id", "name", selectedService);

            if (!_service.CreatePlatform(platformToCreate))
                return View(platformToCreate);

            TempData["Msg"] = "Record Created";
            return RedirectToRoute(new { controller = "Home" });
        }

1 Ответ

1 голос
/ 07 июня 2009

Это зависит от того, какую версию EF вы используете, и даже если бы я знал, какую версию возможности по-прежнему безграничны. :) Я приведу несколько примеров.

Версия 1.0

public void Update(User user)
{

    using (var context = new ObjectContext(""))
    {
        user.Blog = GetBlog(user.Id);

        context.ApplyPropertyChanges("User", user);
    }
}

private Blog GetBlog(int userId)
{
    using (var context = new ObjectContext(""))
    {
        return (from u in context.Users
                where u.Id == userId
                select u).FirstOrDefault();
    }
}

В версии 2 и POCO:

public class User
{
    public virtual int Id { get; set; }
    public virtual Blog Blog { get; set; }

    public void AddEntry(Entry entry)
    {
        if (Blog.Entries == null)
            Blog.Entries = new List<Entry>();

        entry.Blog = Blog;
        Blog.Entries.Add(entry);
    }
}

public class Blog
{
    public virtual int Id { get; set; }
    public virtual IList<Entry> Entries { get; set; }
}

Тогда, конечно, существует множество опций, использующих значения EntityKey, загрузку ссылок и т. Д. Я, как правило, использую самый простой вариант из имеющихся.

РЕДАКТИРОВАТЬ: Хорошо, получил ваш вопрос. MVC очень простителен, если вы относитесь к нему правильно. Я бы начал со следующего: Когда вы создаете свой список выбора, это нормально:

ViewData["service_id"] = new SelectList(cats, "id", "name", selectedService);

Но для правильного использования этого списка выбора в MVC вы можете назначить его следующим образом:

<%= Html.DropDownList("Service.Id", (IEnumerable<SelectListItem>)ViewData["service_id"])%>

Здесь следует отметить Service.Id . Это означает, что любое значение, выбранное в раскрывающемся списке, будет присвоено Platform.Service.Id. Когда вы сохраните свои изменения, Entity Framework сделает всю работу за вас.

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