【问题标题】:Dealing with Master data table and Related tables in Entity Framework在实体框架中处理主数据表和相关表
【发布时间】:2015-02-14 08:31:13
【问题描述】:

我有 3 张桌子

Employee(ID,FirstName,LastName) - 我们包含所有员工,包括经理等,

EmployeeRole(RoleID,Role) - 这里我们定义了员工的角色

Project(ProjectName,Manager,Employee,Date..) - 这里是分配给所有员工的项目的详细信息。

  1. 在项目表中,我有像 Emmployee、Manager 这样的列,这两列都是 Employee 表的外键。问题是我有像(名字,姓氏)这样的输入,我如何找到员工的 ID。 还是表结构错了?

  2. 当我尝试在项目表中插入数据时,EmployeeRole 表也在更新。它不应该更新 EMployeeRole 表。它是一个主数据。

请给我建议解决方案?

【问题讨论】:

    标签: c# entity-framework entity-framework-5 ado.net-entity-data-model


    【解决方案1】:

    您的逻辑数据模型不正确(恕我直言)。

    一个项目可以有很多员工。员工可以作为特定角色参与一个或多个项目。

    因此,Employee 和 Project 之间是多对多的,交叉表具有 Role 类型。

    例如

    CREATE TABLE [dbo].[Employee](
        [EmployeeID] [int] NOT NULL,
        [FirstName] [nvarchar](50) NOT NULL,
        [LastName] [nvarchar](50) NOT NULL,
        [RoleID] [int] NOT NULL,
     CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
    (
        [EmployeeID] ASC
    )) 
    GO
    
    CREATE TABLE [dbo].[Project](
        [ProjectID] [int] NOT NULL,
        [ProjectName] [nvarchar](50) NOT NULL,
     CONSTRAINT [PK_Project] PRIMARY KEY CLUSTERED 
    (
        [ProjectID] ASC
    )) 
    GO
    
    CREATE TABLE [dbo].[ProjectEmployee](
        [ProjectID] [int] NOT NULL,
        [EmployeeID] [int] NOT NULL,
        [RoleID] [int] NOT NULL,
     CONSTRAINT [PK_ProjectEmployee] PRIMARY KEY CLUSTERED 
    (
        [ProjectID] ASC,
        [EmployeeID] ASC,
        [RoleID] ASC
    )) 
    GO
    
    CREATE TABLE [dbo].[Role](
        [RoleID] [int] NOT NULL,
        [RoleName] [int] NOT NULL,
     CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED 
    (
        [RoleID] ASC
    )) 
    GO
    
    ALTER TABLE [dbo].[ProjectEmployee]  WITH CHECK ADD  CONSTRAINT [FK_ProjectEmployee_Employee] FOREIGN KEY([EmployeeID])
    REFERENCES [dbo].[Employee] ([EmployeeID])
    GO
    
    ALTER TABLE [dbo].[ProjectEmployee]  WITH CHECK ADD  CONSTRAINT [FK_ProjectEmployee_Project] FOREIGN KEY([ProjectID])
    REFERENCES [dbo].[Project] ([ProjectID])
    GO
    
    ALTER TABLE [dbo].[ProjectEmployee]  WITH CHECK ADD  CONSTRAINT [FK_ProjectEmployee_Role] FOREIGN KEY([RoleID])
    REFERENCES [dbo].[Role] ([RoleID])
    GO
    

    那么你的 LinqToEntity 看起来像这样:

    // Add a new Role
    Role role = new Role();
    role.RoleID = 1;   // TODO: make identity in database
    role.RoleName = "Role 1";
    db.Roles.Add(role);
    db.SaveChanges();
    
    // Add a new Employee
    Employee employee = new Employee();
    employee.EmployeeID = 1;   // TODO: make identity in database
    employee.FirstName = "Carl";
    employee.LastName = "Prothman";
    db.Employee.Add(employee);
    db.SaveChanges();
    
    // Add a new Project
    Project project = new Project();
    project.ProjectID = 1;   // TODO: make identity in database
    project.ProjectName = "Create new data model";
    db.SaveChanges();
    
    // Add employee to project as role1
    ProjectEmployee projectEmployee = new ProjectEmployee();
    projectEmployee.ProjectID = project.ProjectID;
    projectEmployee.EmployeeID = employee.EmployeeID;
    projectEmployee.RoleID = role.RoleID;
    db.ProjectEmployees.Add(projectEmployee);
    db.SaveChanges();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 2015-12-01
      相关资源
      最近更新 更多