У меня есть класс Артикул:
public class Article
{
public int Id { get; set; }
public string Text { get; set; }
public Title Title { get; set; }
}
и название:
public class Title
{
public int Id { get; set; }
public string Name { get; set; }
public int MaxChar { get; set; }
}
Прежде чем вы сможете написать Article
, вы должны выбрать свой Title
из списка, чтобы можно было определить ваш StringLength для Article.Text
. Это означает, что эта статья может иметь только определенное количество символов, в зависимости от того, какой «Заголовок» имеет автор. Пример: Title.Name
«Title1» может написать статью только с 1000 символов (MaxChar
), а Title.Name
«Title2» может написать статью с 3000 символов. Так. Это означает, что длина строки для Article.Text
должна быть от Title.MaxChar
.
Сущность Title
- это префиксные данные, которые будут храниться в БД.
Вот что я сделал далеко:
Заголовки из БД перечислены в виде со ссылкой для создания действия ArticleController с строкой запроса «title»:
@Models.Title
@foreach (var item in Model) {
@Html.ActionLink(item.Name, "Create", "Article", new { title = item.Id}, new FormMethod())
}
Вы заполняете форму и публикуете ее. Действие HttpPost Create:
[HttpPost]
public ActionResult Create(Article article)
{
if (article.Text.Length > article.Title.MaxChar)
{
ModelState.AddModelError("Text",
string.Format("The text must be less than {0} chars bla bla", article.Title.MaxChar));
}
if (ModelState.IsValid)
{
db.Article.Add(article);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(hb);
}
Вот проблема. Контроллер также добавляет новый объект Title
. Поэтому в следующий раз, когда я перейду к представлению, в котором мне нужно будет выбрать Заголовок, появится копия последней сущности, которую я использовал для написания статьи.
Должен ли я сделать это совершенно новым способом, или есть небольшой твик? Единственное, о чем я могу думать, это просто отправить MaxChar
в виде строки запроса и вообще не иметь отношения между моделями. Просто кажется немного глупо / webforms kindda.
Приветствия
ОБНОВЛЕНИЕ № 1:
Может быть, я делаю это неправильно?
Действие Создать
public ActionResult Create(int title)
{
var model = new Article
{
Title = db.Title.Find(title)
};
return View(model);
}
Или, может быть, это в модели? Мол, я должен установить внешние ключи? Что-то вроде:
[ForeignKey("Title")]
public int MaxChar { get; set; }
public virtual Title Title { get; set; }
Но я уверен, что я читал кое-что, где это не нужно, что EF позаботится об этом.