2009-06-20 9 views
3

Essayant de mapper le schéma suivant à l'aide d'Entity Framework.Entity Framework Mapping Question

  • Un client peut avoir plusieurs magasins associés.
  • Un magasin peut avoir de nombreux associés client
  • Chaque magasin peut avoir 0 ou 1 et seulement 1 TopCustomer (les critères à un TopCustomer est déterminé dans la logique métier)

alt text

cette résultats avec le mappage suivant dans VS.

alt text


Voici le script 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 
 

Question:

Comment l'association TopCustomer être mis en correspondance avec une seule instance de sans créer de Client une navigation supplémentaire n propriété sur la classe Customer?

+0

Désolé, quelle application utilisez-vous pour effectuer les mappages? – Macarse

+0

Visual Studio 2008 – ehosca

Répondre

4

Il semble que vous ayez déjà le modèle et le mappage déjà en place?

Mais vous avez juste besoin de supprimer la propriété de navigation supplémentaire?

Si vous voulez supprimer la propriété de navigation, c'est assez simple (même si vous ne pouvez pas le faire avec le concepteur EF standard).

Il vous suffit d'ouvrir votre fichier EDMX dans un éditeur XML (assez facile à l'intérieur VS) et de supprimer les <NavigationProperty .../> indésirables de l'entité client.

De cette façon, la relation existe toujours dans le modèle, mais dans la classe que vous ne pouvez passer de Store.TopCustomer

vous ne pouvez pas aller dans l'autre.

Hope this helps

Alex

Program Manager Entity Framework équipe, Microsoft.