2009-06-20 142 views
3

嘗試使用實體框架映射以下模式。實體框架映射問題

  • 客戶可以有許多關聯的商店。
  • 商店可以具有許多相關聯的顧客
  • 每個商店可以具有0或1且僅1 TopCustomer(標準是一個TopCustomer在業務邏輯被確定)

alt text

此結果與VS中的以下映射。

alt text


這裏的DB腳本:

 

USE [TestDb] 
GO 
/****** Object: Table [dbo].[Customer] Script Date: 06/20/2009 09:53:52 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Customer](
    [CustomerId] [uniqueidentifier] NOT NULL, 
    [FirstName] [nvarchar](50) NOT NULL, 
    [LastName] [nvarchar](50) NOT NULL, 
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
    [CustomerId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 
/****** Object: Table [dbo].[Store] Script Date: 06/20/2009 09:53:52 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Store](
    [StoreId] [uniqueidentifier] NOT NULL, 
    [StoreName] [nvarchar](50) NOT NULL, 
    [TopCustomer] [uniqueidentifier] NULL, 
CONSTRAINT [PK_Store] PRIMARY KEY CLUSTERED 
(
    [StoreId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 
/****** Object: Table [dbo].[CustomerStore] Script Date: 06/20/2009 09:53:52 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[CustomerStore](
    [CustomerId] [uniqueidentifier] NOT NULL, 
    [StoreId] [uniqueidentifier] NOT NULL, 
CONSTRAINT [PK_CustomerStore] PRIMARY KEY CLUSTERED 
(
    [CustomerId] ASC, 
    [StoreId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 
/****** Object: ForeignKey [FK_CustomerStore_Customer] Script Date: 06/20/2009 09:53:52 ******/ 
ALTER TABLE [dbo].[CustomerStore] WITH CHECK ADD CONSTRAINT [FK_CustomerStore_Customer] FOREIGN KEY([CustomerId]) 
REFERENCES [dbo].[Customer] ([CustomerId]) 
ON UPDATE CASCADE 
ON DELETE CASCADE 
GO 
ALTER TABLE [dbo].[CustomerStore] CHECK CONSTRAINT [FK_CustomerStore_Customer] 
GO 
/****** Object: ForeignKey [FK_CustomerStore_Store] Script Date: 06/20/2009 09:53:52 ******/ 
ALTER TABLE [dbo].[CustomerStore] WITH CHECK ADD CONSTRAINT [FK_CustomerStore_Store] FOREIGN KEY([StoreId]) 
REFERENCES [dbo].[Store] ([StoreId]) 
ON UPDATE CASCADE 
ON DELETE CASCADE 
GO 
ALTER TABLE [dbo].[CustomerStore] CHECK CONSTRAINT [FK_CustomerStore_Store] 
GO 
/****** Object: ForeignKey [FK_Store_TopCustomer] Script Date: 06/20/2009 09:53:52 ******/ 
ALTER TABLE [dbo].[Store] WITH CHECK ADD CONSTRAINT [FK_Store_TopCustomer] FOREIGN KEY([TopCustomer]) 
REFERENCES [dbo].[Customer] ([CustomerId]) 
GO 
ALTER TABLE [dbo].[Store] CHECK CONSTRAINT [FK_Store_TopCustomer] 
GO 
 

問:

如何才能TopCustomer協會被映射到客戶的單個實例,而無需創建額外的導航n客戶類中的屬性?

+0

對不起,您使用哪個應用程序來完成映射? – Macarse 2009-06-20 14:13:40

回答

4

這聽起來像你有模型工作和映射已經?

但你只需要刪除額外的導航屬性?

如果你想刪除導航屬性,這是非常簡單的(雖然你不能做到標準的EF設計師)。

您只需在XML編輯器中打開您的EDMX文件(在VS中足夠簡單)並從客戶實體中刪除不需要的<NavigationProperty .../>

這樣的關係模型仍然存在,但在課堂上,你只能從 Store.TopCustomer

去,你不能走另一條路。

希望這有助於

亞歷

項目經理實體框架團隊,微軟。