Tag: 多对多

使用entity framework中的属性映射多对多关系

我总是使用Attributes将我的实体的属性映射到它们对应的列。 这是一个例子: [Table(“news_entries”)] public class News { [Key] public int Id { get; set; } [Column(“d_date”)] public DateTime Date { get; set; } [Column(“m_text”)] public string Text { get; set; } [Column(“id_user”)] public int UserId { get; set; } [ForeignKey(“UserId”)] public User User { get; set; } } 但我仍然不知道,我如何映射多对多关系,其中表和列名称与属性不匹配。 我知道我可以在我的DbModelBuilder中使用DbContext ,但我不想在我的实体类之外进行映射。 是否有可能将这些关系映射到属性?

HasManyToMany Fluent NHibernate映射删除错误

我一直在研究一个名为Task的实体上的多对多映射。 任务可以有很多孩子和许多父母。 在它们之间有一个连接表,它只有两个FK列“ParentTaskId”和“ChildTaskId”。 这是我到目前为止所提出的。 // Many-to-Many Parents HasManyToMany(x => x.Parents) .Table(“TaskDependency”) .ParentKeyColumn(“ParentTaskId”) .ChildKeyColumn(“ChildTaskId”) .Inverse() .Not.LazyLoad() .Cascade.SaveUpdate(); // Many-to-Many Children HasManyToMany(x => x.Children) .Table(“TaskDependency”) .ParentKeyColumn(“ChildTaskId”) .ChildKeyColumn(“ParentTaskId”) .Not.LazyLoad() .Cascade.SaveUpdate(); 这里有一些示例代码可以帮助我说明我的问题。 以下代码有效: _taskRepository.Save(_taskVendor); _taskRepository.Save(_taskClientVendor); _taskRepository.Save(_taskClient); _taskVendor.Children.Add(_taskClientVendor); _taskClientVendor.Children.Add(_taskClient); _taskRepository.Save(_taskVendor); _taskRepository.Save(_taskClientVendor); _taskRepository.Delete(_taskVendor); _taskRepository.Delete(_taskClientVendor); _taskRepository.Delete(_taskClient); 但是,如果我将删除语句的顺序更改为: _taskRepository.Delete(_taskVendor); _taskRepository.Delete(_taskClient); _taskRepository.Delete(_taskClientVendor); 我的多对多联接表中出现了fk约束违规。 我认为这与我在映射上设置逆向的方式有关。 它会影响执行查询的顺序,以避免出现这种精确的fk约束问题。 有没有办法映射这个,以便我可以删除任何一方,子或父,但没有此exception的实体? 我在映射的两边都尝试了反向,但这导致了我的多对多关系没有被保存。 > _ < 任何帮助将非常感激。

LINQ多对多关系:解决方案?

LINQ到目前为止一直非常优雅,但是为了执行基本的m2m查询,它提供了我无法立即看到的解决方案。 更糟糕的是,虽然它适用于任何其他表关系,但LINQ并没有给我一个关于我的m2m表的类结构的关联。 所以我可以这样做 artwork.artists.where(…) //or artist.Artworks.add(artwork) 但我不能这样做 artwork.artowrks_subjects.tagSubjects.where(…) //or tagSubject.artworks_subjects.add(artwork) 替代文字http://img299.imageshack.us/img299/257/20090902122107.png 是否有解决此限制的常见模式?

使用Entity Framework删除多对多关系

我有三个表学生(studID,fullName,性别……),注册(studID,courseID,日期)和课程(courseID,courseName,…)。 我使用下面的代码删除了包含studID 001的Enroll表中的所有记录,其中有大约三个学生签名的课程。 但是,它只删除一条记录。 using(var context = new DBEntities()) { var _stud = (from s in context.Students where s.studID == “001” select s).FirstOrDefault(); var _course = _stud.Courses.FirstOrDefault(); _course.Students.Remove(_stud); context.SaveChanges(); } 我在这里想念什么?

是否有更好/更清晰的方法来查找独立关联更改(添加/删除)?

我发现这个答案 (除非我遗漏了一些东西)提供了一个很好的解决方案来捕获对DbContext中所有独立关联所做的所有更改。 我正在尝试将该解决方案调整为更具体的内容,以创建可以在特定实体上查找特定导航属性的更改的函数。 目标是让这个函数的用户不必担心EntityFramework的任何内部结构,并且只关心他的POCO模型。 这是我到目前为止,它的工作原理。 但在我看来,如果entity framework的内部实现细节发生变化,它看起来非常混乱并且容易中断 – 特别是那里有一个“魔术字符串” “ClrPropertyInfo” ,可能不是EF接口合同的一部分。 public partial class EntityFrameworkMaterializer { public IEnumerable GetAssociationChanges(T1 parent, string propertyName, EntityState findState) { // this.context is a DbContext instance that is a property of the object. ObjectContext ocontext = ((IObjectContextAdapter)this.context).ObjectContext; MetadataWorkspace metadataWorkspace = ocontext.MetadataWorkspace; // Find the AssociationType that matches the property traits […]

MVC 4编辑控制器/查看多对多关系和复选框

我正在使用ASP.NET MVC 4和Entity Framework,我正在寻找一些方法来创建多个关系和我的数据库中的复选框,用于创建/编辑控制器和视图,我已经找到了@Slauma答案的答案在MVC 4中创建- 多对多关系和复选框但是,我真的很想看到它如何扩展到编辑和删除function以及此解决方案中的其他一些合作伙伴。 有人可以请说明如何在Edit控制器方法中填充ClassificationSelectViewModel以获取“已选中”和“未选中”值吗? 这是一个Matt Flowers问题,也将解决我的问题。

NHibernate多对多关系问题:可以选择,无法更新

每个用户都有一个角色列表: 我正在跟踪SQL服务器的所有查询。 当我选择用户时,我也看到了SQL SELECT语句(这是好的)。 问题是当我尝试更新现有用户(具有角色)时:我只看到User表的更新,但没有User_Role (这是坏的)。 澄清一下:我不希望在Role表中插入/更新(但在User_Role ,因为角色是“永久的”并且可以自由地附加和分离。 为什么选择正常,但不更新 。 请? 如果需要更多信息 – 请问 – 我会尝试回答所有次要问题。 更新: Role映射: 更新N2:这是表的定义方式: Role表: CREATE TABLE [Roles] ( [Id] INTEGER NOT NULL PRIMARY KEY, [Name] text NOT NULL, [LastChanged] INT NOT NULL DEFAULT(0) ); CREATE UNIQUE INDEX uidxUserName ON Roles (Name COLLATE NOCASE); User表: CREATE TABLE [Users] ( [Id] […]

EF存储库模式多对多插入

我们有2个表: 表权限: public class Authority { public int ID {get;set;} public string Name{get;set;} … } 表代理商 public class Agent { public int ID{get;set;} public int FirstName{get;set;} } 我们在这两个表之间存在多对多的关系: public class AuthorityConfiguration : EntityTypeConfiguration { public AuthorityConfiguration() : base() { HasKey(p => p.ID); HasMany(p => p.Agents).WithMany(a => a.Authorities).Map(mc => { mc.MapLeftKey(“AuthorityID”); mc.MapRightKey(“AgentID”); mc.ToTable(“AuthorityAgent”); }); ToTable(“Authority”); } […]

如何为许多映射配置nHibernate?

使用nHibernate 3.2,C#4.0,SQL Server 2008 R2 Express 我有两个业务实体 – Broker和Market 。 它们分别存储在brokers和markets表中。 我还有一个brokerMarkets表,有一个名为MinIncrement额外列。 Broker和Market之间有很多关系,但只有当我想存储MinIncrement值时(即它是可选的)。 我的课程看起来像这样: public class Market : BusinessBase { public Market() {} public virtual int Id { get; set; } public virtual string Symbol { get; set; } public virtual string Description { get; set; } } public class Broker : BusinessBase { public […]

EntityFramework Mutli-Table多对多

我正在使用EF4.1 Code First,我正在尝试创建一些需要链接表的多对多关系表。 请参阅下面的小代码片段: class Event { int EventId { get; set; } ICollection Contacts { get; set; } } class Contact { int ContactId { get; set; } ICollection Relations { get; set; } } class Relation { int RelationId { get; set; } string Name { get; set; } } 因此,Contacts对象可以有许多不同类型的关系,例如“Mother”,“Father”,“Brother”等。 我需要跟踪联系人参加的某种活动,但我想知道他是如何与举办活动的人联系的。 例如,他是Eventer的兄弟,父亲还是丈夫? […]