gpt4 book ai didi

c# - Entity Framework 以不确定的方式未经许可删除有效内容?

转载 作者:行者123 更新时间:2023-11-30 16:24:39 25 4
gpt4 key购买 nike

我在使用 EF 将数据存储到数据库时遇到了问题。通常所有的 CRUD 操作对于程序的其余部分都可以正常工作,但最近我注意到,在 m:n 关系的情况下,棘手的部分来了。

我使用 EF4.1 和代码优先方法。我的类(class)中有趣的部分如下所示:

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() 之后,Publications 和 Groups 都存储了它们的 ICollection。在下面几行的相同方法中,我从数据库中获取数据(仅用于检查),并且两个实体再次填充了它们的 ICollection。

麻烦来了:

当执行不同的数据操作函数时,我从数据库中挖掘数据并:

  • 出版物的收集很好,实体的 ale 有适当的 ICollection<Group>从 xml 填充
  • 但是群组的集合非常困惑。他们中的大多数人都有ICollection<Publication>设置为空。

可能是什么问题?这种行为对我来说真的很奇怪。最后但并非最不重要的是从 DBSet<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)

有什么想法吗?

构建代码优先数据库时模型困惑?框架错误或奇怪的内部框架优化?还是我只是个 SCSS ? :)

我也在考虑通过在里面放置一个新实体来改变这种关系。即转移 Publication (m):(n) Group类似于 Publication (m):(1) NewEntityRelation (n):1 Group , 但如果有的话,我宁愿选择不同的解决方案。

感谢您的回复。

最佳答案

除非我弄错了,否则 InverseProperty 属性可帮助 EF 将关系的一侧与另一侧配对,但它不会告诉 EF 任何有关关系类型的信息。我假设当您说要创建“m:n”关系时,您的意思是“多对多”,而且我发现 EF 并不总能正确解决。我养成了通过覆盖 OnModelCreating 方法手动为多对多关系指定映射的习惯。以下是示例代码片段:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(a => a.Roles)
.WithMany(r => r.Users)
.Map(config =>
{
config.ToTable("UserRoles");
config.MapLeftKey("UserId");
config.MapRightKey("RoleId");
});
}

上面的代码片段摘 self 的一个项目,该项目用于定义用户与其在系统中的角色之间的多对多关系。这样 EF 就不会“混淆”什么样的关系、数据库中中间表的名称或用于将一侧映射到另一侧的键。我不确定为什么您只在关系的一侧看到问题,但我敢打赌这是因为 EF 无法完全弄清楚您要做什么。

关于c# - Entity Framework 以不确定的方式未经许可删除有效内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10639810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com