Có thể thêm chế độ xem vào mô hình Thực thể mà không có mã định danh aunique không?
Nếu không có khóa chính, không. Điều đó sẽ dẫn đến loại lỗi này:
Một hoặc nhiều lỗi xác thực đã được phát hiện trong quá trình tạo mô hình:
System.Data.Edm.EdmEntityType::EntityType 'SalesOnEachCountry' không có khóa nào được xác định. Xác định khóa cho EntityType.System.Data.Edm.EdmEntitySet:EntityType:EntitySetSalesOnEachCountryList dựa trên loại SalesOnEachCountry có các phím được xác định.
Nếu không có số nhận dạng duy nhất, thì có, mặc dù nó có đầu ra không mong muốn. Các bản ghi có cùng số nhận dạng sẽ tham chiếu đến cùng một đối tượng, đây được gọi là Mẫu bản đồ nhận dạng
Một ví dụ, ngay cả khi chế độ xem của bạn tạo ra hai hàng sau:
Country Year TotalSales
Philippines 2010 20.000000
Philippines 2011 40.000000
Nếu bạn chỉ ánh xạ khóa chính trên trường Quốc gia, ví dụ:
public class SalesOnEachCountry
{
[Key]
public int CountryId { get; set; }
public string CountryName { get; set; }
public int OrYear { get; set; }
public long SalesCount { get; set; }
public decimal TotalSales { get; set; }
}
, ngay cả khi chế độ xem của bạn tạo ra hai hàng trên trên trình soạn thảo truy vấn Oracle của bạn, Entity Framework tạo ra kết quả không chính xác này:
Country Year TotalSales
Philippines 2010 20.000000
Philippines 2010 20.000000
Entity Framework sẽ coi hàng thứ hai là đối tượng giống với hàng đầu tiên.
Để đảm bảo tính duy nhất, bạn phải xác định những cột nào làm cho mỗi hàng là duy nhất. Trong ví dụ trên, Năm phải được bao gồm để khóa chính là duy nhất. tức là
public class SalesOnEachCountry
{
[Key, Column(Order=0)] public int CountryId { get; set; }
public string CountryName { get; set; }
[Key, Column(Order=1)] public int OrYear { get; set; }
public long SalesCount { get; set; }
public decimal TotalSales { get; set; }
}
Làm cho khóa chính của bạn tương tự với các thuộc tính ở trên, Entity Framework có thể ánh xạ chính xác từng hàng trong chế độ xem của bạn với các đối tượng của riêng chúng. Do đó, Entity Framework hiện có thể hiển thị chính xác các hàng mà chế độ xem của bạn có.
Country Year TotalSales
Philippines 2010 20.000000
Philippines 2011 40.000000
Chi tiết đầy đủ tại đây:http://www.ienablemuch.com/2011/06/mapping-class-to-database-view-with.html
Sau đó, liên quan đến chế độ xem của bạn không có bất kỳ cột nào để tạo một hàng duy nhất, cách dễ nhất để đảm bảo Khung thực thể có thể ánh xạ từng hàng trong chế độ xem của bạn với các đối tượng của riêng chúng là tạo một cột riêng cho khóa chính
create view RowNumberedView as
select
row_number() over(order by <columns of your view sorting>) as RN
, *
from your_existing_view
Sau đó chỉ định [Key]
thuộc tính RN của class RowNumberedView
của bạn