Tôi đã tạo chế độ xem trong SQL Server có chứa các cột quan trọng nhất từ các bảng khác nhau. In nội dung của bảng vào khung nhìn ASP.NET MVC hoạt động tốt, nhưng khi tôi muốn lấy chi tiết của một bản ghi duy nhất, sự cố xảy ra.Số lượng giá trị khóa chính được truyền phải khớp với số giá trị khóa chính được xác định trên thực thể
Số lượng giá trị khóa chính phải khớp với số giá trị khóa chính được xác định trên thực thể.
tôi hướng đến kỷ lục cụ thể làm điều này:
@Html.ActionLink("Details", "Details", new { id=item.Record_number })
Ghi số là khóa chính. Tôi đặt điều này theo cách thủ công bằng cách nhấp chuột phải vào biến cụ thể trong mô hình .edmx
. Sau đó, tôi cố gắng để có được những dữ liệu cụ thể bằng cách sử dụng sau đây:
//
// 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");
}
}
Và mô hình trông như thế này:
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 */
}
}
Hiện nay tôi đang sử dụng đoạn mã sau để làm cho nó tất cả công việc. Nhưng tôi không cảm thấy đây là một cách hay hay hiệu quả. Và tôi rất tò mò làm thế nào để sửa lỗi thất bại ở trên!
//
// 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);
}
người có bất kỳ ý tưởng tại sao lỗi này xảy ra? Cảm ơn vì sự giúp đỡ!
Có thể thêm khóa chính vào chế độ xem trong cơ sở dữ liệu không? –
Xin lỗi tôi nghĩ rằng bạn đã nói rằng bạn đã thêm PK vào bảng bình thường trong tệp edmx không xem. Bạn đã thử .SingleOrDefault thay vì Find()? – Marcin
Làm việc như một sự quyến rũ! Cảm ơn nhiều! Sau đó tôi đã thay đổi dòng sau: 'RecordDataView record = db.RecordDataView.Find (id); // ĐÂY CÁC LỖI OCCUR' Để sau: 'RecordDataView recorddataview = db.RecordDataView.SingleOrDefault (m => m.Record_number == id); ' Một lần nữa, cảm ơn bạn! –