asp.net – 与Entity Framework中的联结表有多对多的关系?
我试图在Entity Framework中创建一个多对多的关系(代码优先),根据以下帖子:
Database design for limited number of choices in MVC and Entity Framework?
但是,我无法让它正常工作,而且我确信我的做法非常简单.这是我尝试过的图表: 联结表的要点是我需要在关系中有一个额外的属性Level,所以我不能只顾问顾问和程序之间的直接关系.我在设计器中手动添加了ConsultantProgramLink实体,然后分别向Program和Consultant添加了关联,选择为每个添加FK,然后将它们作为主键.但是,当我这样做时,它不能像我预期的那样工作: 如果我在顾问和程序之间建立了直接关联,那么我可以在我的代码中引用Consultant.Programs.但现在使用联结表不起作用.有没有办法解决这个问题,或者我是否总是需要通过交汇点属性(Consultant.ConsultantProgramLink.Programs)?在任何情况下,即使我尝试通过交汇处属性也无济于事.我可以在我的代码中做Consultant.ConsultantProgramLink,但是另一个点没有给我导航属性程序(由于某种原因它也变成了简单的程序,为什么?如果我最终可以访问它们,我可以重命名它们吗?) . 那么我做错了什么?为什么我不能通过代码中的点表示法访问属性? 解决方法
将联结表建模为实体后,确实会失去顾问与程序之间的多对多关系.这就是它的工作原理.您将在联结表中具有直接的多对多关系或其他属性.不是都.如果您想要两者,您可以尝试在Consultant上创建自定义程序属性,并使用linq查询来获取相关程序:
public IEnumerable<Program> Programs { get { return this.ConsultantProgramLinks.Select(l => l.Program); } } 这个例子也解释了你的上一个问题.您不能在ConsultantProgramLink上拥有Program属性,因为它是相关实体的集合,而不是单个实体(应该称为ConsultantProgramLinks). ConsultantProgramLink实体中的属性简单地称为Programbe,因为它表示单个实体而不是集合. 编辑: 如果您需要自动将每个程序与每个顾问相关联,则必须在创建新程序时强制执行该程序.将联结表暴露为单独的实体可能会让您轻松实现: var program = new Program(); ... context.Programs.AddObject(program); var ids = from c in context.Consultants select c.Id; foreach (var id in ids) { var link = new ConsultantProgramLink { ConsultantId = id,Program = program }; context.ConsultantProgramLinks.AddObject(link); } context.SaveChanges(); 如果添加新顾问,则必须以相同方式创建指向所有程序的链接. 缺点是,如果你有1000个顾问,这个构造将创建1001个数据库插入,其中每个插入将在单独的往返数据库中执行.要避免它,唯一的选择是在Program表上使用存储过程或触发器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在asp.net App_Code目录中使用Nemerle
- asp.net-mvc-3 – 模型绑定器和隐藏字段
- asp.net – 不使用.Net MVC犯了错误?
- asp.net-mvc – 调试ASP.NET MVC源码?
- asp.net – MVC5中IdentityDbContext和IdentityDbContext之
- 如何检查ASP.Net中客户端(JavaScript)的Page.Validate()?
- asp.net单点登录不工作
- asp.net – 有没有理由不接受数据库引擎优化顾问的建议?
- 当我的模型在我的ASP.NET MVC应用程序中为null时,EditorFor
- asp.net – 51degrees.mobi的替代方案?
- 集成ASP.NET身份的最佳做法 – 它们是否存在?
- asp.net-mvc – RazorPDF将pdf文件保存到MVC4中的
- 处理ASP.NET MVC中日期的最佳方法 – Javascript
- asp.net – 什么是SQL Server Reporting Service
- asp.net – 为什么Glimpse会禁用请求验证?
- asp.net – 更新ValidationSummary列表控件模糊?
- 使用ASP.NET,JQuery和Suckerfish构建数据库驱动的
- asp.net-mvc – 元素’标题’出现次数太少,ASP.N
- asp.net-mvc – 使用Visual Studio和ASP.NET MVC
- 更改用户名ASP.net MVC 3会员资格