Я разрабатываю и Entity Framework Code Первая библиотека 6.1.0 с .NET Framework 4.5.1 и C#.Set ICollection <int> Свойство как внешние ключи к ICollection <User> в EntityTypeConfiguration class
У меня есть этот класс:
public class Message
{
public int MessageId { get; set; }
public string Body { get; set; }
public DateTime DateSent { get; set; }
public Nullable<int> GroupId { get; set; }
public Group FromGroup { get; set; }
public int UserId { get; set; }
public User Sender { get; set; }
public ICollection<User> Recipients { get; set; }
}
С помощью этого класса конфигурации:
public class MessageConfiguration : EntityTypeConfiguration<Message>
{
public MessageConfiguration()
{
ToTable("Message");
Property(m => m.Body).IsRequired();
Property(m => m.Body).IsMaxLength();
Property(m => m.DateSent).IsRequired();
HasOptional(m => m.FromGroup).
WithMany(g => g.Messages).
HasForeignKey(m => m.GroupId);
HasRequired(m => m.Sender).
WithMany(u => u.MessagesSent).
HasForeignKey(m => m.UserId).
WillCascadeOnDelete(false);
HasMany(r => r.Recipients).
WithMany(m => m.MessagesReceived).
Map(mr =>
{
mr.ToTable("MessageRecipient");
mr.MapLeftKey("MessageId");
mr.MapRightKey("UserId");
});
}
}
Как вы можете видеть, если создать новый Message
экземпляр класса, я могу использовать UserId
или Sender
для установки отправителя сообщения. Я также могу сделать то же самое с GroupId
и FromGroup
.
Но, если я хочу установить получателей пользователя, мне нужно установить Users' class
экземпляров, но я не могу использовать идентификаторы пользователей.
Как я могу это сделать?
Моя проблема заключается в том, что я не знаю, как сказать, что эти EF идентификаторов Recipients
'внешние ключи, как я сделал с Sender
и UserId
:
HasRequired(m => m.Sender).
WithMany(u => u.MessagesSent).
HasForeignKey(m => m.UserId).
WillCascadeOnDelete(false);
Я хочу, чтобы создать новое свойство на Message
класса :
public ICollection<int> RecipientsId;
потому что я хочу создать новый экземпляр класса сообщений и установить получателей с использованием идентификатора пользователя.
Я не знаю, как изменить EntityTypeConfiguration, чтобы сообщить E.F., что у этого нового свойства ICollection<int> RecipientsId
есть внешние ключи ICollection<User> Recipients
.
ПРИМЕЧАНИЕ: Я собираюсь использовать эту библиотеку на API 2 службы Web ASP.NET и я хочу, чтобы отправить int
значения в качестве реципиентов, вместо отправки User
экземпляров.
Зачем вам нужно, 'общественного ICollection RecipientIds', у вас есть' ICollection Recipients', так что если вы хотите там идентификаторы вы можете просто использовать LINQ 'Recipients.Select (х => x.UserId)' –
Пожалуйста, прочитайте записку в конце моего вопроса. Благодарю. – VansFannel