我在使用EF 4.1和多對多關係時遇到了問題。我決定使用數據庫的第一種方法(雖然我得到了與代碼第一種方法相同的問題),我創建的數據庫模型:實體框架多對多關係不起作用
我有很多的圖片和標籤表之間的多對多關係。在數據庫中,它被創建爲一個名爲「PictureTag」的新表,其中包含字段「Picture_Id」和「Tag_Id」。
我用下面的代碼將數據添加到我的數據庫:
if (tags != null)
{
foreach (HtmlNode tagNode in tags)
{
string tagString = tagNode.InnerText.Remove(0, 1);
Tag tag;
if (db.Tags.Any(q => q.TagName == tagString))
{
tag = db.Tags.Single(q => q.TagName == tagString);
}
else
{
tag = new Tag { TagName = tagString };
}
pic.Tags.Add(tag);
}
}
List<DbEntityValidationResult> list = db.GetValidationErrors().ToList();
db.Pictures.Add(pic);
db.SaveChanges();
這當然只是我的代碼部分。它是我的Crawler函數的一部分。代碼工作正常,不會產生任何錯誤,並在單個數據庫上下文中工作。
完成此功能後,我可以在PictureTag表格中查看我的數據庫,所有三張圖片,標籤和實體中的數據。
然而,當我嘗試將我的視圖圖片和與該圖片相對應的標籤放在一起時,我看不到任何標籤。就像沒有任何圖片附有任何標籤。我知道這是不正確的,因爲我在DB看到的數據,所以我不知道什麼是錯的...
這是FR我的看法代碼:
@model IEnumerable<SikSolution.Picture>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var item in Model)
{
<div>
<img src="@item.Link" alt="@item.Name" />
<br />
<span>
Tags: @foreach (var tag in item.Tags)
{
Html.Label(tag.TagName + ", ");
}
</span>
</div>
}
我真不」不知道什麼是錯的......我會很感激任何建議或指引我朝着正確的方向前進。
謝謝!
非常感謝您,我不知道現在我必須明確告訴我collcetion我想附加一些東西。它在EF 4.1中是新的? – domderen
@Tromax:不,它不是新的。在EF中總是有三種方法來加載導航屬性:延遲加載,預先加載和明確加載。 EF 4.1沒有改變。以下是關於它的概述:http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities .aspx如果你不想在查詢中使用'Include',你可以使用延遲加載,然後加載自動發生,你的原始代碼就可以工作。儘管延遲加載會導致多次往返數據庫。 – Slauma