2010-01-24 31 views
5

Tôi mới tham gia vào Khung thực thể và đang cố gắng tìm ra mọi thứ. Tôi có một cơ sở dữ liệu được tạo ra không quá phức tạp. Có khoảng 7 bảng và 3 trong số đó là các bảng ánh xạ để liên kết một bản ghi bảng w/bảng khác. Ví dụ tôi đang sử dụng ở đây là thế này:Sử dụng khung thực thể, làm cách nào để phản ánh mối quan hệ nhiều đến nhiều và thêm các thuộc tính tồn tại cho một thực thể mới được tạo ra?

  • Bảng tài

    • UserId
    • UserName
  • Bảng Vai trò

    • Id vai trò
    • RoleName
  • Bảng: UserRole

    • UserId
    • Id vai trò

Các phím nước ngoài được ánh xạ trong cơ sở dữ liệu của tôi. Khi tôi tạo một mô hình thực thể mới bên trong VS 2008, sơ đồ dường như có các mối quan hệ đúng, nhưng không tạo ra một bảng cho bảng UserRole. Mối quan hệ được ánh xạ dưới dạng Nhiều đến Nhiều giữa Người dùng & Vai trò.

Vấn đề của tôi là tôi có thể tạo người dùng mới và tôi có thể tạo vai trò mới, nhưng tôi không thể tìm ra cách tạo người dùng mới với vai trò hiện tại. Hơn nữa, bảng UserRole có lẽ không được ánh xạ chính xác trong mô hình để bắt đầu. Dưới đây là mã của tôi cho đến nay:

ObjectQuery<Role> roles = context.Roles; 
Role role = context.Roles.Where(c => c.RoleName == "Subscriber").First(); 

User user = new User 
{ 
    DisplayName = "TestCreate2", 
    Email = "[email protected]", 
    Password = "test" 
};    
context.AttachTo("Roles", role); 
user.Roles.Add(role);    
context.AddToUsers(user); 
context.SaveChanges(); 

Đây là lỗi Tôi nhận:

Không thể cập nhật 'UserRoles' các EntitySet bởi vì nó có một DefiningQuery và không có yếu tố tồn tại trong các yếu tố để hỗ trợ hiện tại hoạt động.

Đây là xml có gắn liền với bảng UserRole:

<EntitySet Name="UserRoles" EntityType="RememberTheJourneyModel.Store.UserRoles" store:Type="Tables" store:Schema="dbo" store:Name="UserRoles"> 
     <DefiningQuery>SELECT 
    [UserRoles].[Role_id] AS [Role_id], 
    [UserRoles].[User_id] AS [User_id] 
    FROM [dbo].[UserRoles] AS [UserRoles]</DefiningQuery> 
     </EntitySet> 

Nó được kéo răng chỉ để tìm ra cách để truy vấn các bối cảnh như vậy mà nó đã cho tôi một tổ chức Vai trò thực tế. Tôi chắc chắn vấn đề là một cái gì đó để làm với cách UserRole được ánh xạ, nhưng tôi chỉ mới bắt đầu ở đây và không có bất kỳ ý tưởng mà có thể đã đi sai.

Và tôi thực sự đã tìm kiếm trên google & trang web này, nhưng tôi cho rằng tôi chưa tìm ra thông số tìm kiếm phù hợp để tìm câu hỏi giúp tôi khắc phục sự cố này. Tôi tìm thấy một câu hỏi cho biết EF có vấn đề với điều này, nhưng nếu bạn đang lập bản đồ bảng làm cho cả hai cột một khóa chính, nó hoạt động chính nó ra. Tôi không chắc chắn làm thế nào để làm điều đó. Điều này được thực hiện trong cơ sở dữ liệu (sử dụng SQL SERVER 2005 EXPRESS) hay trong ánh xạ? Đây là một dự án cá nhân để tôi có thể đăng thêm chi tiết về mã hoặc xml nếu cần. Bất kỳ và tất cả các trợ giúp sẽ được đánh giá cao.

Trả lời

4

Tôi nhớ cũng đã gặp phải sự cố này ... và tôi tin rằng tôi đã sửa nó bằng cách tạo cả hai khóa cột trong bảng liên kết của tôi.

Bạn có thể tạo cả hai cột khóa chính trong trình thiết kế bảng SQL Server Management Studio. Chỉ cần đánh dấu cả User_Id và Role_Id cùng lúc, nhấp chuột phải vào bên trái và chọn Primary Key ... điều này sẽ làm cho nó không có bản ghi nào có thể có cùng một kết hợp User_Id và Role_Id .. làm cho mỗi mục nhập trở nên độc đáo.

Sau đó, bạn có thể cập nhật mô hình dữ liệu của mình trong trình thiết kế Khung thực thể .. và hy vọng sẽ tốt.

Tôi tin rằng nếu một bảng không có bất kỳ khóa nào được xác định để đảm bảo bản ghi là duy nhất, thì EF sẽ không thể cập nhật hồ sơ đúng cách, và do đó khung bảo vệ chống lại trường hợp đó.

+2

Đó là nó! Tôi chỉ không biết cách gán 2 khóa chính. Làm nổi bật cả hai hàng hoạt động. Cảm ơn! – jason

+0

Không sao cả - tôi rất vui được giúp đỡ. – markt

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