Entity Framework Mapping Question - PullRequest
       7

Entity Framework Mapping Question

3 голосов
/ 20 июня 2009

Попытка отобразить следующую схему с помощью Entity Framework.

  • У покупателя может быть много связанных магазинов.
  • В магазине может быть много связанных клиентов
  • В каждом магазине может быть 0 или 1 и только 1 TopCustomer (критерии для того, чтобы быть TopCustomer определяется в бизнес-логике)

alt text

это приводит к следующему отображению в VS.

alt text


Вот сценарий БД:


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 с одним экземпляром Customer без создания дополнительного свойства навигации в классе Customer?

1 Ответ

4 голосов
/ 20 июня 2009

Похоже, у вас уже есть модель и карта?

Но вам просто нужно удалить дополнительное свойство навигации?

Если вы хотите удалить свойство навигации, это довольно просто (хотя вы не можете сделать это стандартным конструктором EF).

Вы просто открываете свой файл EDMX в редакторе XML (достаточно просто внутри VS) и удаляете ненужные <NavigationProperty .../> из сущности клиента.

Таким образом, отношения все еще существуют в модели, но в классе вы можете перейти только от Store.TopCustomer

ты не можешь пойти другим путем.

Надеюсь, это поможет

Alex

Руководитель программы Entity Framework Team, Microsoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...