我有一個類文章:問題與實體框架/ DB關係
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
「標題1」只能寫一篇文章,用1000個字符(MaxChar
),和Title.Name
「標題2」可以寫一篇文章,3000個字符。所以。那意味着對於Article.Text
的字符串長度必須來自Title.MaxChar
。
的Title
實體是將被存儲在DB前綴的數據。
這裏是香港專業教育學院宋迄今所做的: 從DB中的標題在一個視圖中列出,並鏈接到創建ArticleController的行動,「稱號」查詢字符串:
@Models.Title
@foreach (var item in Model) {
@Html.ActionLink(item.Name, "Create", "Article", new { title = item.Id}, new FormMethod())
}
您填寫表格,並張貼它。 HttpPost創建操作:
[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的視圖時,我用來寫文章的最後一個實體有一個重複。
我應該這樣做在entirly新的方式,還是有一個小的調整。只有我能想到的其他事情,只是發送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; }
但是我敢肯定,我讀了一些在那裏,它的心不是necesary,即EF需要的照顧。
聽起來像標題的Id屬性不是主鍵(或唯一)? – Rune
你使用Code First嗎? – counsellorben
@counsellorben代碼優先 –