C# 具有.NET 4.0多对多关联的实体框架
我不熟悉.NET和EF,我正在开发一个需要动态查询实体的应用程序。 我有一个带有3个表的db:C# 具有.NET 4.0多对多关联的实体框架,c#,.net,database,entity-framework,C#,.net,Database,Entity Framework,我不熟悉.NET和EF,我正在开发一个需要动态查询实体的应用程序。 我有一个带有3个表的db: **Employee** **EmployeeSkills** **Skill** Employee_ID Id Skill_ID Name Employee_ID Name Address Skill_ID etc. etc.
**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的konoledge
我真的需要设计我的实体,使查询尽可能简单,这意味着没有连接或复杂的sql。我已经设法实现了选择和筛选属性的所有功能,但我仍在努力处理多对多关系
我知道,如果我的中间表只有Employee_ID和Skill_ID字段,那么我可以使用Employee.skills引用技能。有没有办法使用我当前的表结构来实现这一点
我希望有某种映射,比如在员工实体上定义某种导航属性,该属性存储获取员工所有技能所需的查询
另外,我正在使用VS 2012,EF运行时版本4.0.3,版本4.4.0如果您使用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方法中,您无法在您的案例中配置导航属性。
您好,我们正在从现有数据库生成实体。遗憾的是,在db-first方法中,您不能做您想做的事情。在这个链接中,您可以阅读您在您的情况下可以做什么:在从数据库生成后,有没有办法进行这种映射?如果我可以生成我自己的“虚拟数据库”“对于一个实体来说,这将是完美的。虚拟财产指仅在实体中定义的、未保存在数据库中的财产。例如,生成返回技能名称和级别列表的虚拟财产技能。我担心这无法完成:(您应该使用导航属性EmployeeSkills来处理它,或者使用代码优先的方法进行数据库映射。(代码优先表示映射在代码中。可以对现有数据库进行映射).这就是我所需要的,如果可以对现有数据库进行映射的话,那么它是完美的。我应该在哪里进行映射?我不喜欢EF隐藏我的中间表,我更喜欢在可以看到实际情况的地方进行连接。