我在使用 EF 将数据存储到数据库时遇到问题。通常所有 CRUD 操作对于程序的其余部分都可以正常工作,但最近我注意到,在 m:n 关系的情况下,棘手的部分来了。
我正在使用带有代码优先方法的 EF4.1。我的课程中有趣的部分如下所示:
public class Publication : IItem, IDataErrorInfo {
...
[InverseProperty("Publications")]
public virtual ICollection<Group> Groups{ get; set; }
}
public class Group : IItem, IDataErrorInfo {
...
[InverseProperty("Groups")]
public virtual ICollection<Publication> Groups{ get; set; }
}
数据库创建如下:
public PublicationsDB() : base("PublicationDB") {
this.Configuration.AutoDetectChangesEnabled = true;
}
public DbSet<Publication> Publications { get; set; }
public DbSet<Software> Softwares { get; set; }
public DbSet<Group> Group{ get; set; }
目的是在出版物和组之间创建 m:n 关系。
最近我从 XML 导入数据时,一切都很好。在调用 SaveChanges() 之后,出版物和组都存储了它们的 ICollection。在下面几行相同的方法中,我从数据库中获取数据(仅用于检查),并且再次填充了两个实体的 ICollection。
麻烦来了:
在执行不同的数据操作函数时,我从数据库中挖掘数据并:
- 出版物的集合很好,实体的啤酒已经
ICollection<Group>
从 xml 中正确填充 - 但是组的集合非常混乱。他们中的大多数都
ICollection<Publication>
设置为空。
问题可能是什么?这种行为对我来说真的很奇怪。最后但并非最不重要的一点是,删除 Collections fromDBSet<Groups>
不是确定性的。我的意思是,如果我们考虑 A 组和 B 组,而不是在程序的一次运行中,A.ICollection = null and B.ICollection.Count =1 (which is by the way wrong)
而在另一次运行中是不同的,即A.ICollection = null and B.ICollection = null (which is also wrong)
有任何想法吗?
构建代码第一个数据库时模型混乱?框架错误或奇怪的内部框架优化?还是我只是个混蛋?:)
我也在考虑通过在其中放置一个新实体来改变关系。即转移Publication (m):(n) Group
到类似的东西Publication (m):(1) NewEntityRelation (n):1 Group
,但如果有的话,我宁愿选择不同的解决方案。
谢谢您的回复。