2012-05-30 12 views
7

tôi đơn giản hóa mã một chút trong khi cố gắng để gỡ lỗi:Thành viên đậm đà bản sắc '' không tồn tại trong bộ sưu tập siêu dữ liệu r nParameter tên:. Sắc

[HttpPost] 
    public ActionResult Register(User model) 
    { 
     DateTime bla = new DateTime(2012, 12, 12); 
     try 
     { 
      User user = new User 
      { 
       gid = 1, 
       cid = 1, 
       firstName = model.firstName, 
       lastName = model.lastName, 
       email = model.email, 
       username = model.username, 
       password = model.password, 
       creationDate = bla, 
       active = 1 
      }; 
      myContext.Users.AddObject(user); 
      myContext.SaveChanges(); 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

     return View();    
    } 

Các giá trị này được transmited cho phù hợp. Người dùng bảng:

[id] [int] IDENTITY(1,1) NOT NULL, 
[cid] [int] NULL, 
[gid] [int] NULL, 
[firstName] [nvarchar](100) NOT NULL, 
[lastName] [nvarchar](100) NOT NULL, 
[email] [nvarchar](max) NOT NULL, 
[username] [nvarchar](100) NOT NULL, 
[password] [nvarchar](100) NOT NULL, 
[creationDate] [datetime] NOT NULL, 
[active] [int] NOT NULL, 

CONSTRAINT [PK_ người dùng _3213E83F0AD2A005] PRIMARY KEY Clustered

Tôi đã xóa tất cả các phím nước ngoài để chắc chắn rằng không có gì ảnh hưởng đến nó. Tôi chắc chắn rằng tại một thời điểm trước đó nó đã được làm việc, nhưng bây giờ tôi không thể tìm ra nơi vấn đề được. Nó bị treo khi thực hiện SaveChanges:

{"An error occurred while updating the entries. See the inner exception for details."} 
{"The member with identity '' does not exist in the metadata collection.\r\nParameter name: identity"} 
+0

Tại sao bạn đang khởi tạo Người dùng mới và đặt thuộc tính? Bạn có thể trực tiếp thiết lập các thuộc tính không ràng buộc với mô hình đúng không? – VJAI

+0

đã thử sử dụng giải pháp dưới đây (không khởi tạo đối tượng Người dùng mới) nhưng không hoạt động. –

+0

Mô hình người dùng có id thuộc tính không? – VJAI

Trả lời

7

vấn đề này đã được tái tạo vì một kích hoạt mà là trên bàn người sử dụng. Loại bỏ nó và vấn đề không tái tạo nữa.

0

Hãy thử

[HttpPost] 
public ActionResult Register(User model) 
{ 
    DateTime bla = new DateTime(2012, 12, 12); 
    try 
    { 
     model.gid = 1; 
     model.cid = 1; 
     model.creationDate = bla; 
     model.active = 1; 

     myContext.Users.AddObject(model); 
     myContext.SaveChanges(); 

    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
     throw; 
    } 

    return View();    
} 
+0

Tôi vẫn gặp lỗi –

5

tôi đã có lỗi tương tự bị ném khi tôi cố gắng để chèn sử dụng EF, lỗi là

The member with identity 'Id' does not exist in the metadata collection.\r\nParameter name: identity

Đó là không rõ ràng lúc đầu nhưng thông điệp ngoại lệ là rất ngắn gọn vì cơ sở dữ liệu của tôi biết cột Id int nhưng thuộc tính được tạo cho đối tượng trên mã của tôi là int ID để quay lại ánh xạ được đặt tên, Id không được ánh xạ tới ID.

Vì vậy, khi đối tượng có thuộc tính ID được gửi đến cơ sở dữ liệu chỉ biết Id bạn sẽ nhận được lỗi ở trên.

Tôi hy vọng điều này sẽ giúp, nhờ

2

Tôi nghĩ rằng giải pháp tốt nhất là trong this đường bưu điện. Tôi đã sử dụng tùy chọn thứ 3 và hoạt động. Ở đây tôi báo cáo trả lời trong liên kết:

The issue could be related to a "instead of insert" trigger on one of your tables.

The EF framework is performing validation on the inserted row of data by calling scope_identity(). However, an "instead of insert" trigger will change the context of the insertion in such a way that the EF system's call to scope_identity will return null.

A couple ways around this:

  1. Use a stored procedure to insert the data (not tested)
  2. Remove the instead of insert trigger (triggers can cause other problems, so some people argue not to use them) (tested, works!)
  3. Turn off validation in the EF framework, so: context.Configuration.ValidateOnSaveEnabled = false (tested, works!)
1

Tôi có lỗi này cùng ngày hôm nay và dành một vài giờ bực bội cố gắng tìm nó ra.

Tôi đã sử dụng Khung thực thể để chèn bản ghi với cột nhận dạng vào bảng cơ sở dữ liệu máy chủ SQL. Đủ đơn giản.

Bảng có trình kích hoạt trên đó, lần lượt chạy thủ tục được lưu trữ. Quy trình được lưu trữ có một dòng trong đó:

select newid() 

Đây là dòng đã phá vỡ Khung thực thể.

Đối với các bảng có cột nhận dạng, Entity Framework dự kiến ​​sẽ được trả về một hàng duy nhất với một trường duy nhất là cột nhận dạng.

3

Có thể có một trình kích hoạt trên bảng đang được cập nhật và nó sẽ trả về đầu ra. Đầu ra bị vứt đi nhưng nó xung đột với EF.sản lượng như vậy thường được dùng để gây nên debug (và quên xóa sau):

select 'trigger called, i am here' 

hoặc có thể có thiếu biến:

select column 

thay vì

select @variable=column 
-1

Đây là lần đầu tiên trang Google đã trả lại khi tôi tìm kiếm giải thích cho phiên bản của sự cố tạo ra thông báo lỗi này, vì vậy tôi sẽ đề cập đến nó ở đây, cùng với độ phân giải của tôi.

Trong phiên bản của tôi về vấn đề này, các mã vi phạm trông như thế này:

foreach (var comp in colorstyle.Companions) 
     comp.LinkCS = db.ColorStyles.Find(comp.LinkColorStyleId); 

Tôi thừa hưởng công việc duy trì và hỗ trợ các ứng dụng có mã này trong đó. Mã này đang thiết lập thuộc tính dẫn hướng tới thực thể đã liên quan, sử dụng thuộc tính khóa ngoài được liên kết của cùng một đối tượng như là tìm kiếm. Đó là hoàn toàn không cần thiết, và dường như đôi khi .. không phải lúc nào .. tạo ra lỗi này:

"Các thành viên đậm đà bản sắc 'Customization_ColorStyleCustomizations_Source' không tồn tại trong bộ sưu tập siêu dữ liệu Parameter tên:. Sắc"

đó là khá một thông báo lỗi, phải không. Trong hai năm, mã này ngồi đó mà không ném bất kỳ lỗi nào, sau đó đột nhiên một ngày, nó bắt đầu sản xuất lỗi này cho một số kiểu màu nhất định./lắc. Tôi không hiểu điều đó. Nhưng nó không cần thiết, và lấy nó ra giải quyết vấn đề, vì vậy. Chỉ trong trường hợp một người khác có cùng một vấn đề chung xảy ra trên đây, đây rồi.

(Trong trường hợp không rõ ràng - trong trường hợp này, độ phân giải chỉ đơn giản là xóa mã.)