entity-framework-6 - 实体框架一对多 - 空虚拟集合
问题描述
我有这个代码第一个数据库
public partial class SystemWarning
{
[Key]
public long Id { get; set; }
/// <summary>
/// id of the admin that created the entry
/// </summary>
public string CreatedById { get; set; }
public virtual AspNetUser CreatedBy { get; set; }
public string AcknowledgedById { get; set; }
public virtual AspNetUser AcknowledgedBy { get; set; }
}
public partial class AspNetUser
{
public AspNetUser()
{
SystemWarnings = new HashSet<SystemWarning>();
}
[Key]
public string Id { get; set; }
public virtual ICollection<SystemWarning> SystemWarnings { get; set; }
}
并链接在一起如下
modelBuilder.Entity<AspNetUser>()
.HasMany(e => e.SystemWarnings)
.WithOptional(e => e.CreatedBy)
.HasForeignKey(e => e.CreatedById).WillCascadeOnDelete(false);
由于目前我无法理解的原因,当我提取 AspNetUser 时,SystemWarnings 集合始终为空,即使数据库中存在链接到 AspNetUser 的系统警告。
我有一堆这些 1-n 链接,即使在同一个对象上,其他链接仍然非空,现在我没有看到差异。
@edit:这是另一个用于比较的对象:
public partial class UserProfile: BaseObject
{
public Guid Id { get; set; }
public string OwnerId { get; set; }
public virtual AspNetUser Owner { get; set; }
}
and the mapping
modelBuilder.Entity<AspNetUser>()
.HasMany(e => e.OwnedUserProfiles)
.WithOptional(x => x.Owner)
.HasForeignKey(x => x.OwnerId);
对我来说似乎是一样的,除了 SystemWarning 有一个 long as Id 和身份规范(之前忘了发布 - 它的定义如下)
modelBuilder.Entity<SystemWarning>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
而且那个 SystemWarning 实际上有另一个对我现在添加的 AspNetUser 的引用 (AcknowledgedBy(Id)),它的链接如下
modelBuilder.Entity<AspNetUser>()
.HasMany(e => e.SystemWarnings)
.WithOptional(e => e.AcknowledgedBy)
.HasForeignKey(e => e.AcknowledgedById).WillCascadeOnDelete(false);
我会尽快发布 SQL 跟踪...
解决方案
好吧,那个编辑成功了。从 SystemWarning 到 AspNetUser 的两个链接都映射到 SystemWarnings 集合上。难怪这没有按预期的方式工作。
注意我自己.. 将每 1:n 映射到不同的集合,否则会有麻烦。
推荐阅读
- amazon-web-services - 从 CloudFormation 模板生成代码(java、python 等)
- powershell-3.0 - 使用变量名输出多个文件的函数
- node.js - No'Access-Control-Allow-Origin
- three.js - THREE.js 正交相机位置在 *dolly* 使用 OrbitControl 后未更新
- xamarin - MultiDex:启用 MultiDex 时超出主 Dex 容量
- dart - 带有项目的地图中的返回语句:在 Flutter DropdownButton 中,为什么以及如何工作
- sql-server - 对连接到 Azure SQL Server 的“建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误”进行故障排除
- git - Git Rebase 还是 Squash?
- node.js - 错误 [ERR_STREAM_DESTROYED]:流被销毁后无法调用 write
- javascript - 在记忆游戏中反应参考