2

我是 .NET 和 EF 的新手,我正在开发一个需要动态查询实体的应用程序。我有一个带有 3 个表的数据库:

**Employee**      **EmployeeSkills**      **Skill**
Employee_ID       Id                      Skill_ID
Name              Employee_ID             Name
Address           Skill_ID                etc.
etc.              Level

我将从我的客户端发送用于选择的属性名称和带有用于过滤的属性值对的字典,例如 {"name", "skill",[{"skillId="1"},{"level=2"}] } 将返回所有具有 id 1 相关技能和 2 级该技能知识的员工。

我真的需要设计我的实体,使查询尽可能简单,这意味着没有连接或复杂的 sql。我已经设法实现了用于选择和过滤属性的所有内容,但我仍在为多对多关系而苦苦挣扎。

我知道,如果我的中间表只有 Employee_ID 和 Skill_ID 字段,那么我可以使用 Employee.Skills 引用技能。有没有办法使用我当前的表结构来解决这个问题?

我希望有某种映射,例如在 Employee 实体上定义某种导航属性,该属性存储获取具有其级别的员工的所有技能所需的查询。

PS 我使用的是 VS 2012,EF 运行时版本 4.0.3,版本 4.4.0

4

1 回答 1

2

如果您使用 codefirst 方法,您可以配置与 Fluent API 的关系:

HasMany(e => e.Skills).WithMany(s=>s.Employees).Map(se =>
            {
                se.MapLeftKey("Skill_ID");
                se.MapRightKey("Employee_ID");
                se.ToTable("EmployeeSkills");
            });

更新在 DB-First 方法中,您不能在您的情况下配置导航属性。 这是您可以阅读在您的情况下可以做什么的链接。

于 2012-11-29T09:06:21.100 回答