2009-06-20 139 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

去,你不能走另一条路。

希望这有助于

亚历

项目经理实体框架团队,微软。