Tag: many to many

NHibernate多对多映射

我遇到了使用NHibernate进行多对多映射的问题。 基本上我在我的对象模型(场景和技能)中有2个类映射到我的数据库中的三个表(Scenario,Skill和ScenarioSkill)。 ScenarioSkills表只保存SKill和Scenario表(SkillID,ScenarioID)的ID。 在对象模型中,Scenario具有一些常规属性和从ScenarioSkills表中获取的关联技能列表(IList)。 Skill对象没有关联的IList of Scenarios。 从场景和技能到场景技能的映射是多对多关系: 情景* — * ScenarioSkill * — *技能 我已将列表映射为行李,因为我认为这是我阅读过的最佳选择。 映射如下: 在Scenario类中 并在技能课程内 一切正常,除非我尝试删除技能时,它不能这样做,因为ScenarioSkill表的SkillID列上存在引用约束。 谁能帮我? 我在C#asp.net 3.5 Web应用程序解决方案上使用NHibernate 2。

如何在Entity Framework中添加或删除多对多关系?

有一个多对多的UserFeed表位于User和Feed之间,表示类似Twitter的跟随关系。 它只有两个字段,形成一个复合键: UserID和FeedID 。 我需要编写一个方法,根据布尔标志从订阅源订阅或取消订阅用户。 public void SetSubscriptionFlag (int userId, int storeId, bool subscribe) { } 我是Entity Framework的新手,所以我试图找到并遵循“EF-ish”方式来实现这一目标。 我最初的想法是: 我应该创建一个多对多的Subscriptions属性( 编辑:这里的命中限制 ),而不是使用中间的UserFeed类; 在我这样做之后,我需要通过ID获取User实例,检查它是否在其Subscriptions提供了Feed并根据标志和当前存在添加/删除它; 在检查和添加/删除之前有一段时间间隔并且用户设法提交两个添加或删除请求时,弄清楚如何避免竞争冲突; 优化我的代码,以避免不必要的SELECT,如果有的话,因为我真正想做的只是一个SELECT和单个INSERT / DELETE。 我非常感谢您对我的观点的相关代码段和评论。 谢谢!

EF5多对多更新已断开连接的方案

我没有找到一个很好的解决方案来解决这个问题(类似的票据在这里EF5更新断开连接图(n层)一对多 )。 我发现并遵循了这个例子: http : //entityframeworktutorial.net/update-many-to-many-entities-in-entity-framework.aspx#.UTBeTDBhif8 。 这工作正常,但它创建了相关实体的副本(使用sql profiler我看到Insert into RelatedEntities ..我希望只是在MyEntities_Related连接表上插入/更新,我不明白为什么EF插入在RelatedEntities表上:( 这是我的代码: public void AddOrUpdate(MyEntity entity) { var dbEntity = _context.MyEntities .Include(e => e.RelatedEntitis) .Where(e => e.ID == entity.ID) .SingleOrDefault(); var newRelated = entity.RelatedEntitis.ToList(); var dbRelated = dbEntity.RelatedEntity.ToList(); _context.Entry(dbEntity).CurrentValues.SetValues(entity); var comparer = new EqualityComparer(); var addedRelated = newRelated.Except(dbRelated, comparer).ToList(); var deletedRelated = dbRelated.Except(newRelated, comparer).ToList(); […]

如何使用FK设置集合属性?

我有一个Business和Category模型。 每个Business通过公开的集合拥有许多Categories ( Category无视Business实体)。 现在这是我的控制器动作: [HttpPost] [ValidateAntiForgeryToken] private ActionResult Save(Business business) { //Context is a lazy-loaded property that returns a reference to the DbContext //It’s disposal is taken care of at the controller’s Dispose override. foreach (var category in business.Categories) Context.Categories.Attach(category); if (business.BusinessId > 0) Context.Businesses.Attach(business); else Context.Businesses.Add(business); Context.SaveChanges(); return RedirectToAction(“Index”); } 现在有几个business.Categories将其CategoryId设置为现有Category ( Category的Title属性缺失)。 […]

Linq2Sql很多:很多问题,你会怎么做?

我知道很多:Linq2Sql不支持很多,但我正在解决一个问题 我正在使用我的小SO克隆,我有一个带有问题的表和一个带有标签和链接表QuestionTag的表,所以我有一个经典的很多:问题和标签之间的许多关系。 要在首页显示问题列表,我有这个类,我想从Linq2Sql查询中填写 public class ListQuestion { public int QuestionID { get; set; } public string Title{ get; set; } public IEnumerable Tags { get; set; } } public IEnumerable GetQuestions() { from q in Questions …………….. select new ListQuestion{ … } } 问题是我应该如何填写Tag集合。 我发现在单个查询中不可能这样做,所以我将其分为2个查询,1个用于获取问题,1个用于获取标记,然后尝试加入它们。 我知道很多:entity framework支持很多,所以他们是如何做到的? 你会怎么做? 任何替代方法? 查询当然应该是有效的。

使用EF插入具有多对多关系的操作

我有两个模型类: public class Candidate { public int Id { get; set; } public string Name { get; set; } public ICollection Jobs { get; set; } } public class Job { public int Id { get; set; } public string Name { get; set; } public ICollection Candidates { get; set; } } 我的DbContext名称是JobsContext。 上面的代码生成了3个表候选人,工作和候选人工作(由EF自动生成) […]

entity framework – 多对多的关系

嗨,我尝试与EF Fluent API使用多对多关系。 我有2个POCO课程。 public class Project { public int ProjectId { get; set; } public virtual ICollection Authors { get; set; } public Project() { Authors = new List(); } } public class Author { public int AuthorId { get; set; } public virtual ICollection Projects { get; set; } public Author() { Projects […]

LINQ to entities – 构建where子句以在多对多关系中测试集合

所以,我正在使用Linqentity framework。 我有2个实体: Content和Tag 。 他们彼此处于多对多的关系中。 Content可以有很多Tags , Tag可以有很多Contents 。 所以我试着写一个查询来选择任何标签名称等于blah所有内容 这些实体都将另一个实体的集合作为属性(但没有ID)。 这是我在努力的地方。 我确实有Contains的自定义表达式(所以,无论谁可以帮助我,你可以假设我可以为一个集合做一个“包含”)。 我得到了这个表达式: http : //forums.microsoft.com/MSDN/ShowPost.aspx?PostID = 2670710&SiteID = 1 编辑1 我最终找到了自己的答案。