2010-08-12 30 views
15

OK, đây là kịch bản. Tôi có 3 bàn. Một gọi là aspnet_Users được gọi là Categories và một bảng liên kết được gọi là User_Categories. aspnet_Users and Categories đều có các khóa chính (UserId và ID tương ứng). Bảng liên kết chỉ có hai cột: CategoryID và UserId, và có các mối quan hệ khóa ngoài được thiết lập cho mỗi cột VÀ tôi có một thiết lập khóa duy nhất cho hai cột trên User_Categories. Điều này thiết lập một mối quan hệ nhiều-nhiều giữa bảng aspnet_Users và bảng Categories. Tôi tạo ra các tập tin edmx thực thể của tôi từ thiết lập cơ sở dữ liệu này, và mọi thứ trông hoàn hảo và hoạt động cho hầu như tất cả các hoạt động.Entity Framework 4 Lỗi: Không thể cập nhật EntitySet vì nó có một DefiningQuery

Điều tôi muốn làm là thêm một danh mục mới từ một biểu mẫu (tự hoạt động một cách hoàn hảo) và đồng thời, kết hợp một người dùng cụ thể với danh mục mới được gửi. Khi tôi cố gắng làm điều này tôi nhận được lỗi trong dòng chủ đề của mình. Đây là mã tôi đang sử dụng để thử điều này (ctx là đối tượng ngữ cảnh đối tượng của tôi):

public ActionResult Create(Category category, Guid userId) 
{ 
    aspnet_Users user = ctx.aspnet_Users.SingleOrDefault(x => x.UserId == userId); 
    ctx.Categories.AddObject(category); 
    user.Categories.Add(category); 
    ctx.SaveChanges();; 
    return RedirectToAction("Index"); 
} 

Tại sao tính năng này không hoạt động?

Trả lời

38

tôi giả thông điệp ngoại lệ đầy đủ là một cái gì đó tương tự như:

Unable to update the EntitySet YourTableName because it has a DefiningQuery and no InsertFunction element exists in the ModificationFunctionMapping element to support the current operation.

Điều này sẽ xảy ra nếu bảng DB của bạn không có một khóa chính xác định.

Thêm khóa chính vào bảng của bạn (sử dụng SQL Server Management Studio hoặc bất kỳ thứ gì) và cập nhật mô hình .edmx của bạn từ cơ sở dữ liệu.

+1

điều gì xảy ra nếu bạn nhận được điều này trên Chế độ xem thay vì Bảng !! – Necronet

+1

@Necronet, xin lỗi tôi không thể nói. Chế độ xem cũng có thể xác định khóa, phải không? Bạn có một xác định trên quan điểm của bạn? –

+0

có nhưng EF dường như đã thiết lập khóa của tôi một cách tự động (và ngẫu nhiên), tôi đã cố gắng chỉnh sửa dmx bằng trình soạn thảo XML nhưng mỗi khi tôi cập nhật nó đặt lại khóa chính, không biết tại sao ... – Necronet

2

Lỗi: Không thể cập nhật các EntitySet bởi vì nó có một DefiningQuery

Hai lần tôi đã nhận lỗi này, hai lần tôi đã tìm kiếm câu trả lời ở khắp mọi nơi, và cuối cùng thì ánh xạ của tôi đã sai lầm hoặc cơ sở dữ liệu không có khóa chính hoặc một cái gì đó. Tôi đề nghị kiểm tra tất cả ra ...

2

tôi gặp phải cùng một vấn đề, và tôi cố định bằng cách liên kết sau:

tôi loại bỏ phần của Xác định truy vấn bằng .edmx dựa trên nội dung của liên kết thứ 3. Và sau đó mọi thứ hoạt động như một sự quyến rũ.

+1

Điều này không bền vững trong mô hình cơ sở dữ liệu đầu tiên. Cập nhật mô hình sẽ thổi bay những thay đổi. – Dan

2

Đặt khóa chính kết hợp trên bảng ánh xạ, điều này sẽ cho EF biết để xử lý chính xác.

Các vấn đề liên quan