0

抱歉,如果我的主题不太有意义,但这是问题所在:

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

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

我在 Entity Framework 中对此进行了建模,并在我的 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 中引用一个notes 集合一次)。

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

列名“Employee_Id1”无效。

它正在运行以下 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 的列,但我不确定是什么让它期待。我怀疑在此之后还会有其他问题。如果有人有任何想法,我很想听听他们的意见。

4

1 回答 1

0

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

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

[ForeignKey("AddedByEmployee_Id")]
public virtual Employee AddedByEmployee { get; set; }
于 2013-05-08T16:23:06.767 回答