问题描述
我有一个Message
,可以有很多线程。我将 thread 称为MessageThread
。 MessageThread
实际上只封装了线程所有者(Message
)和响应,也封装了 Message
。
public class Message {
public int Id {get; set;}
// other properties
public ICollection<MessageThread> Threads {get; set;}
}
public class MessageThread {
public int Id {get; set;}
public Message Owner {get; set;}
public int ThreadId {get; set;}
public virtual Message Thread {get; set;}
}
// EntityFramework configurations
public class MessageConfiguration : IEntityTypeConfiguration<Message> {
public void Configure(EntityTypeBuilder<Message> builder) {
builder.HasMany(message => message.Threads)
.WithOne(messageThread => messageThread.Thread)
.HasForeignKey(message => message.Id);
}
}
public class MessageThreadConfiguration : IEntityTypeConfiguration<MessageThread> {
public void Configure(EntityTypeBuilder<MessageThread> builder) {
builder.HasOne(messageThread => messageThread.Thread)
.WithMany(message => message.Threads)
.HasForeignKey(messageThread => messageThread.ThreadId);
}
}
public async Task<Message> CreateThreadAsync(int parentId,Message threadMessage,IEnumerable<Tag> tags,CancellationToken cancellationToken) {
// create the message record
threadMessage = await CreateMessageAsync(threadMessage,tags,cancellationToken);
using (var context = new DataContext()) {
context.Messages.Attach(threadMessage);
// query parent message
var parentMessage = await context.Messages
.Where(message => message.Id == parentId)
.Include(message => message.Threads)
.SingleOrDefaultAsync(cancellationToken);
if (parentMessage.Threads == null) {
parentMessage.Threads = new List<MessageThread>();
}
parentMessage.Threads.Add(new MessageThread() {
Owner = parentMessage,Thread = threadMessage
});
await context.SaveChangesAsync(cancellationToken);
}
return threadMessage;
}
单个消息将按预期方式保存(参见图片)。但是,请参见下面的MessageThreads
表(带圆圈的 ):
如何解决这种关系,以便ThreadId
引用正确的消息?在这种情况下,2
。
这是One-to-Many
和Message
之间的MessageThread
关系。我是否配置正确?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)