2014-06-17 23 views
5

Tôi có một câu hỏi về làm thế nào để nhận ra một mối quan hệ Bảng trong Microsoft SQL Server 2012.Parent-Child one-to-one Relation cùng Bảng

Tôi có một Table (MyTable) mà nên tổ chức một Phụ huynh/trẻ em kết cấu. Một phụ huynh có thể có một trẻ em và một trẻ em chỉ có một phụ huynh. Đây là một mối quan hệ một-một-cổ điển. Mục nhập cao nhất rõ ràng có thể không có cha mẹ. (Điều này được mô hình hóa thông qua một thuộc tính nullable)

Khi tôi cố gắng mô hình hóa điều này trong MS-SQL, tôi nhận được một bảng như sau.

Generated From EntityFramework

Đây là Mã của tôi:

CREATE TABLE [dbo].[MyTable](
    [Id] [uniqueidentifier] PRIMARY KEY NOT NULL, 
    [Name] [nvarchar](200) NOT NULL, 
    [ParentObjectId] [uniqueidentifier] NULL 
) 

GO 

ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [FK_MyTable_ParentObject] FOREIGN KEY([ParentObjectId]) 
REFERENCES [dbo].[MyTable] ([Id]) 
GO 

ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [Unique_ParentId] UNIQUE(ParentObjectId) 
GO 

ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_ParentObject] 
GO 

Các uniqe Hạn chế nên đảm bảo rằng có ít nhất một phụ huynh cho một đứa trẻ.

BUT Entity Framework sẽ không cho phép tôi thay đổi thuộc tính thành mối quan hệ một-một. Nó luôn tạo ra mối quan hệ một-nhiều.

EDIT: Mã này là DB-Trước tiên.

Bạn có bất kỳ ý tưởng nào về cách tạo mô hình này đúng cách trong MS-SQL và EntityFramework không?

+0

Bạn có thể cho bạn biết định nghĩa/thực thể EF không? – ChrFin

+0

Theo định nghĩa, bạn có nghĩa là mã được tạo ra, hoặc đại diện trực quan trong VisualStudio bao gồm các thuộc tính (.edmx-File)? – sternze

+1

Oh - DB-trước. Tôi cho rằng Code-First. Xin lỗi không thể giúp đỡ với DB-đầu tiên - Tôi dị ứng agains * .edmx tập tin ... – ChrFin

Trả lời

4

Bạn không thể làm những gì bạn muốn trong EF, thật không may.

EF chỉ hỗ trợ ánh xạ từ một đến một khi có khóa chính được chia sẻ (nghĩa là cả hai bảng phải có khóa chính giống nhau và khóa phải là khóa ngoại của khóa kia). Bạn không thể làm điều này khi sử dụng một bảng tự tham khảo vì những lý do rõ ràng.

Lý do EF không hỗ trợ điều này là EF không hỗ trợ các ràng buộc duy nhất, do đó không có cách nào để đảm bảo rằng ánh xạ 1: 1 bị hạn chế. Điều này có thể thay đổi vì EF hiện hỗ trợ các chỉ mục duy nhất, tuy nhiên điều này đã không thay đổi yêu cầu cho các khóa chính được chia sẻ trong một đến một.

Điều tốt nhất bạn có thể làm là tạo ra một đến nhiều.

+0

Câu trả lời thông tin tốt, cảm ơn .. Tôi đã kết thúc với một mối quan hệ một đến nhiều như bạn đề xuất .. – sternze

+0

+1 Đây là câu trả lời thực sự duy nhất tôi đã nhìn thấy vấn đề này. EF khiến tôi thất vọng ... – Daniel

+0

@Daniel - EF hiện là cộng đồng được duy trì, mặc dù nó vẫn được quản lý bởi MS Employees. Nếu tính năng này quan trọng đối với bạn, tôi khuyên bạn nên truy cập trang web codeplex và tham gia. Tôi tin rằng có một vấn đề mở về điều này ... –

-2

Bạn nên tạo bảng cha đầu tiên và sau đó liên hệ bảng con đó nên cái gì như Bảng Chánh

này/ Ô tô/ CarID/ Màu/

Child Bảng/ Make/ MakeID/ Tạo/ CarID/

nếu bạn liên kết nó theo cách bạn sẽ đạt được mối quan hệ chính xác giữa cha mẹ và con

+0

Tôi biết ý bạn là gì, nhưng đây không phải là ý định của tôi .. Tôi có thể lập mô hình các bảng trong DB sie, nhưng EF không thể hiển thị nó một cách chính xác. – sternze

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