数据库优先:我应该如何建模父引用子引用父?

时间:2013-05-08 16:14:30

标签: entity-framework

道歉,如果我的主题没有意义,但问题在于:

在SQL Server中我有:

CREATE TABLE Employee
(
Id INT IDENTITY(1,1)
, Name VARCHAR(50) NOT NULL
);

CREATE TABLE Notes
(
Id INT IDENTITY(1,1)
,Employee_Id INT NOT NULL
, AddedByEmployee_Id INT NOT NULL
, Text VARCHAR(2000)
);

ALTER TABLE Notes
ADD CONSTRAINT pk_Notes
PRIMARY KEY (Id);

ALTER TABLE Notes
ADD CONSTRAINT fk_Notes01
FOREIGN KEY (Employee_Id)
REFERENCES Employee(Id)
ON DELETE CASCADE;

ALTER TABLE Notes
ADD CONSTRAINT fk_Notes02
FOREIGN KEY (AddedByEmployee_Id)
REFERENCES Employee(Id);

因此,员工可以有一个或多个笔记,每个笔记都由员工添加。

我在我的Note.cls中用实体框架对此进行了建模:

public int Id { get; set; }

public string Text { get; set; }

public virtual Employee Employee { get; set; }

public virtual Employee AddedByEmployee { get; set; }

这是我的Employee.cls:

public int Id { get; set; }

public virtual List<Note> Notes { get; set; }

(我假设我只需要从employee.cls引用一次笔记集合)。

目前,当我尝试加载模型时,我得到了一个:

列名称无效&#39; Employee_Id1&#39;。

它正在运行以下SQL:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Text] AS [Text], 
[Extent1].[Employee_Id] AS [Employee_Id], 
[Extent1].[AddedByEmployee_Id] AS [AddedByEmployee_Id], 
**[Extent1].[Employee_Id1] AS [Employee_Id1]**
FROM [Notes] AS [Extent1]
WHERE ([**Extent1].[Employee_Id1]** IS NOT NULL)
       AND (**[Extent1].[Employee_Id1]** = 684)

所以它期待一个名为Employee_Id1的列,但我不确定是什么让它期待。我怀疑在这之后会有其他问题。如果有人有任何想法,我很乐意听到。

1 个答案:

答案 0 :(得分:0)

由于您的字段名称不遵循默认约定,因此您需要告知EF哪些字段应该用于这两个Employee导航属性。

[ForeignKey("Employee_Id")]
public virtual Employee Employee { get; set; }

[ForeignKey("AddedByEmployee_Id")]
public virtual Employee AddedByEmployee { get; set; }