Число переданных значений первичного ключа должно соответствовать числу значений первичного ключа, определенных в сущности
Я создал представление в SQL Server, который содержит наиболее важные столбцы из разных таблиц. Печать содержимого таблицы на ASP.NET MVC view работает нормально, но когда я хочу получить сведения об одной записи, возникает проблема.
число переданных значений первичного ключа должно соответствовать числу значений первичного ключа, определенных в сущности.
я перехожу к конкретной записи, делая это:
@Html.ActionLink("Details", "Details", new { id=item.Record_number })
запись номер-это первичный ключ. Я установил это вручную, щелкнув правой кнопкой мыши по определенной переменной в .edmx
модель. Затем я пытаюсь получить конкретные данные, используя следующее:
//
// GET: /Record/Details/5
public ActionResult Details(int id = 0)
{
try
{
RecordDataView record = db.RecordDataView.Find(id); //HERE THE ERROR OCCUR
if (record == null)
{
return HttpNotFound();
}
return View(record);
}
catch(EntityException)
{
return RedirectToAction("NoDatabaseConnection", "Home");
}
}
и модель выглядит так:
namespace Implant.Database
{
using System;
using System.Collections.Generic;
public partial class RecordDataView
{
public int Record_number { get; set; }
public Nullable<System.DateTime> DOB { get; set; }
public Nullable<System.DateTime> Record_date { get; set; }
/** rest of code omitted */
}
}
на данный момент я использую следующий код, чтобы все работало. Но я не думаю, что это хороший способ или эффективный. И мне очень любопытно, как исправить ошибку выше!
//
// GET: /Record/Details/5
public ActionResult Details(int id = 0)
{
var record = from r in db.RecordDataView
select r;
if (id != 0)
{
record = record.Where(r => r.Record_number == id);
}
RecordDataView rec = record.ToList().First();
return View(rec);
}
кто-то догадался, почему эта ошибка возникает? Спасибо за помощь!
2 ответов
если вы установили свой первичный ключ в .edmx
вы также должны обновить свою базу данных, потому что у вас есть ПК в вашей модели, а не в вашей базе данных. Update: не работает для представлений.
для просмотра используйте .SingleOrDefault
вместо Find()
.
в этом случае измените следующую строку: RecordDataView record = db.RecordDataView.Find(id);
К следующему:RecordDataView recorddataview = db.RecordDataView.SingleOrDefault(m => m.Record_number == id);
Если в таблице базы данных не указано поле первичного ключа, модель edmx будет считать, что каждое поле является ключом. Поэтому убедитесь, что ваша база данных и модель сущности говорят одно и то же.
Если ваша модель и база данных правильно указывают первичный ключ, то вы можете использовать .Найти() и он будет работать.