Если вы беспокоитесь о отложенной загрузке, вы можете сделать свойство навигации не виртуальным, чтобы оно никогда не сработало при отложенной загрузке.
Или вы можете сделать свойство навигации частным, а затем получить доступ к содержимому вконтролируемым образом.Как только вы сделаете свойство навигации приватным, вам нужно будет использовать один из приемов для сопоставления частных свойств с помощью API Code First.Для простоты я использую тот, который встраивает EntityConfiguration в сущность:
public class Attachment
{
public Guid Id { get; set; }
private ICollection<User> Users { get; set; }
public class AttachmentConfiguration : EntityTypeConfiguration<Attachment>
{
public AttachmentConfiguration()
{
HasMany(e => e.Users)
.WithMany(e => e.Attachements)
.Map(m =>
{
m.MapLeftKey("UserId");
m.MapRightKey("AttachmentId");
m.ToTable("User_Attachments");
});
}
}
}
Добавить эту конфигурацию внутри OnModelCreating:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new Attachment.AttachmentConfiguration());
}
Затем вы можете получить доступ к пользователям изнутри Attachment в любомкак вы хотите, или показывать пользователям методы и т. д.
Вы также можете использовать API отслеживания изменений DbContext для доступа к ним из любого места, где у вас есть контекст.Например:
var users = context.Entry(attachment).Collection<User>("Users").CurrentValue;
Если вы действительно вообще не хотите иметь свойство навигации, вы можете перейти к ObjectContext и получить RelatedEnd для коллекции, которая будет EntityCollection.Это довольно сложный код по ряду причин, включая необходимость знать концептуальные имена моделей для ассоциации и конечных имен, которые можно найти, выгрузив EDMX.Я бы избежал такого подхода, если это вообще возможно.