道歉,如果我的主题没有意义,但问题在于:
在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的列,但我不确定是什么让它期待。我怀疑在这之后会有其他问题。如果有人有任何想法,我很乐意听到。
答案 0 :(得分:0)
由于您的字段名称不遵循默认约定,因此您需要告知EF哪些字段应该用于这两个Employee导航属性。
[ForeignKey("Employee_Id")]
public virtual Employee Employee { get; set; }
[ForeignKey("AddedByEmployee_Id")]
public virtual Employee AddedByEmployee { get; set; }