我正在使用 EF Core 6 首先使用 DB 将数据库表映射到实体类。
我的表
Conversation_Users
有一个由 2 列组成的复合主键,它引用 C# 中描述的其他 2 个实体(Conversation
、User
),如下所示:
public class Conversation_Users
{
[Key]
[Column(Order = 0)]
public long ConversationId { get; set; }
[Key]
[Column(Order = 1)]
public long UserId { get; set; }
public string Name { get; set; }
// other properties
public virtual Conversation Conversation { get; set; } // entity C, nevermind on it
public virtual User User { get; set; } // entity D, nevermind on it
}
我有其他表
Message
,其中包含带有2个外键的表Conversation_Users
的参考
[Table("Message")]
public class Message
{
public long Id { get; set; }
[ForeignKey("ConversationId")]
public long ConversationId { get; set; }
[ForeignKey("UserId")]
public long SenderId { get; set; }
[ForeignKey("ReferenceMessageId")]
public long ReferenceMessageId { get; set; }
// other properties
public virtual Message ReferenceMessage { get; set; } // refer to itself
public virtual Conversation Conversation { get; set; } // entity C, nevermind on it
public virtual User Sender { get; set; } // entity D, nevermind on it
}
从实体
Message
(消息)的实例中,如何获取实体Name
中的值Conversation_Users
属性?
可以通过 LINQ 查询。
// input parameters
var messageId = ...
var query =
from m in context.Messages
where m.Id == messageId
join cu in context.Conversation_Users on
new { m.ConversationId, UserId = m.SenderId } equals
new { cu.ConversationId, cu.UserId }
select cu.Name;
var conversationName = query.FirstOrDefault();
无论如何,这是可疑的模型设计,它应该包含适当的导航属性。看起来是多对多的关系。