代码之家  ›  专栏  ›  技术社区  ›  ehosca

实体框架映射问题

  •  3
  • ehosca  · 技术社区  · 16 年前

    正在尝试使用实体框架映射以下架构。

    • 一个客户可以有许多关联的商店。
    • 一家商店可以有许多关联客户
    • 每个商店可以有0或1个TopCustomer,并且只有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关联映射到客户的单个实例,而不在客户类上创建额外的导航属性?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Alex James    16 年前

    听起来你已经有模型工作和映射了吗?

    但您只需要删除额外的导航属性?

    如果您想删除导航属性,它非常简单(尽管您不能使用标准的ef设计器)。

    您只需在XML编辑器中打开您的EDMX文件(在vs中足够简单),然后删除不需要的文件 <NavigationProperty .../> 来自客户实体。

    这样,关系仍然存在于模型中,但在类中只能从 商店.topcustomer

    你不能走另一条路。

    希望这有帮助

    亚历克斯

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