簡體   English   中英

在Entity Framework中處理主數據表和相關表

[英]Dealing with Master data table and Related tables in Entity Framework

我有3張桌子

Employee(ID,FirstName,LastName)-我們擁有所有員工,包括經理等,

EmployeeRole(RoleID,Role)-在這里我們定義了員工的角色

Project(ProjectName,Manager,Employee,Date ..)-這里是分配給所有員工的項目的詳細信息。

  1. 在項目表中,我有Emmployee,Manager之類的列,這兩列都是Employee表的外鍵。 問題是我輸入了(Firstname,Lastname)之類的信息,我該如何找到emplyee的ID。 還是表結構錯誤?

  2. 當我嘗試在項目表中插入數據時,EmployeeRole表也在更新。它不應更新EMployeeRole表。 它是一個主數據。

請建議我解決方案?

您的邏輯數據模型不正確(IMHO)。

一個項目可以有很多員工。 員工可以作為一個特定角色從事一個或多個項目。

因此,員工和項目之間的關系是很多的,交集表具有角色類型。

例如

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM