У меня проблема при использовании новой Entity Framework 4.1. Я начал тестировать его несколько дней назад, и я все еще не знаком с концепцией POCO и этим новым API.
Во всяком случае, делая какое-то кодирование, я создал что-то вроде этого:
public Tag GetTagWithName(string name)
{
if (db.Tags.SingleOrDefault(q => q.Name == name) == null)
{
return new Tag { Name = name };
}
else
{
return db.Tags.SingleOrDefault(q => q.Name == name);
}
}
Что должно проверять в базе данных, существует ли тег с таким именем, и я использую эту функцию в этом фрагменте кода:
if (tags != null)
{
foreach (HtmlNode tagNode in tags)
{
string tagString = tagNode.InnerText.Remove(0, 1);
Tag tag = TagRep.GetTagWithName(tagString);
pic.Tags.Add(tag);
}
}
if (context.Pictures.Any(q => q.Link == pic.Link))
{
continue;
}
else
{
context.Pictures.Add(pic);
}
context.SaveChanges();
Что в основном добавляет теги к вновь созданным фотографиям, проверьте, есть ли фотография в базе данных, а затем, если нет, добавьте ее в базу данных, и вызывайте SaveChanges () после каждого изображения.
Ну, моя проблема в том, что во время выполнения функция GetTagWithName вызывает ошибку «Последовательность содержит более одного элемента» при получении «SingleOrDefault», что не должно происходить, потому что я проверяю всю базу данных перед добавлением любого нового тега, используя это Функция для проверки, если тег уже находится в БД.
Из того, что я увидел в своем коде, ситуация возникает из-за того факта, что даже если я добавлю к рисунку объект Tag, который я извлек из базы данных, он все же позже добавит его в качестве нового объекта в таблицу тегов. .
Есть ли какое-нибудь объяснение этому?