我有此代码的第一个数据库
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时,即使数据库中有链接到AspNetUser的系统警告,SystemWarnings集合也始终为空。
即使在同一个对象上,我也有一堆这样的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的身份标识具有很长的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跟踪...
答案 0 :(得分:0)
好吧,那个编辑就成功了。.从SystemWarning到AspNetUser的两个链接都映射到SystemWarnings集合上。.难怪这没有按预期的方式工作。
给我自己一个提示..将每个1:n映射到另一个集合,否则会遇到麻烦。