相关的多对一导航属性没有首先加载EF代码



我很难首先使用EF代码加载一些相关的导航属性。

我有一个User表,它是我的主表,每次更新它时,它都会生成一个只包含基本内容的UserLight对象。这是通过与User的一对一映射链接的,因此User对象生成标识密钥,然后在保存时,使用该UserId作为其密钥创建UserLlight对象。

我现在有一个两个用户之间的对话对象,出于性能原因,我只想将其加载到发送方和接收方的UserLight对象中。我尝试过使用Fluent和CF进行映射,但当我从存储库加载对象时,只填充UserStartedId和UserRecipientId整数字段,实际的UserLight对象UserStarted和UserReceptive为null。

我的对话课如下

public class DbConversation 
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ConversationId { get; set; }
public virtual DbUserLight UserStarted { get; set; }
public int UserStartedId { get; set; }
public virtual DbUserLight UserRecipient { get; set; }
public int UserRecipientId { get; set; }
public virtual IList<DbStoryMessage> Messages { get; set; }
}

我的Userlight类如下(缩写)

public class DbUserLight 
{
public int UserId { get; set; }
[Required]
[MaxLength(50)]
public string FirstName { get; set; }
[Required]
public DateTime DateOfBirth { get; set; }
}

My DbContext OnModelCreating具有以下

modelBuilder.Entity<DbUserLight>()
.HasKey(a => a.UserId);
modelBuilder.Entity<DbUserLight>()
.Property(a => a.UserId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<DbStoryConversation>()
.HasKey(c => c.ConversationId);
modelBuilder.Entity<DbStoryConversation>()
.Property(c => c.ConversationId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<DbStoryConversation>()
.HasMany<DbStoryMessage>(c => c.Messages)
.WithRequired(m => m.Conversation)
.WillCascadeOnDelete(true);

我的仓库调用如下

public IQueryable<DbStoryInboxMessage> GetInboxMessages()
{
return Work.Context.StoryInboxMessages
.Include(i => i.Conversation.UserStarted)
.Include(i => i.Conversation.UserRecipient)
.Include(i => i.Conversation.Messages);
}

有人能解释一下为什么这不起作用吗?

是否尝试添加外键注释?

public class DbConversation 
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ConversationId { get; set; }
[ForeignKey("UserStartedId")]
public virtual DbUserLight UserStarted { get; set; }
public int UserStartedId { get; set; }
[ForeignKey("UserRecipientId")]
public virtual DbUserLight UserRecipient { get; set; }
public int UserRecipientId { get; set; }
public virtual IList<DbStoryMessage> Messages { get; set; }
}

最新更新