EF Code First Многие ко многим хранят дополнительные данные в таблице ссылок - PullRequest
2 голосов
/ 23 мая 2011

Как сохранить дополнительные поля в «таблице ссылок», которая автоматически создается для меня, если у меня есть две сущности, связанные как имеющие отношение ко многим ко многим?"Много ассоциаций", но мне трудно с правильной настройкой каскадного удаления.

Ответы [ 3 ]

0 голосов
/ 06 июня 2011

Скорее всего, вам потребуется раскрыть связь в модели вашего домена.

В качестве примера мне нужно было сохранить индекс (порядок отображения) для элементов в отношении многие ко многим (Project <> Изображения).

Вот класс ассоциации:

public class ProjectImage : Entity
{
    public Guid ProjectId { get; set; }
    public Guid ImageId { get; set; }
    public virtual int DisplayIndex { get; set; }       
    public virtual Project Project { get; set; }
    public virtual Image Image { get; set; }
}

Вот отображение:

public class ProjectImageMap : EntityTypeConfiguration<ProjectImage>
{
    public ProjectImageMap()
    {
        ToTable("ProjectImages");
        HasKey(pi => pi.Id);
        HasRequired(pi => pi.Project);
        HasRequired(pi => pi.Image);
    }
}

Из карты проекта:

HasMany(p => p.ProjectImages).WithRequired(pi => pi.Project);

Отображает следующее свойство в проекте:

public virtual IList<ProjectImage> ProjectImages { get; set; }

Надеюсь, что поможет

Бен

0 голосов
/ 11 декабря 2012

Предположим, существует связь «многие ко многим» между двумя типами: «Пользователь» и «Сообщение», а класс ассоциации определен как UserMessageLink с дополнительными свойствами.

public class User {
    public int Id {get;set;}
}

public class Message {
    public int Id {get;set;}
}

//The many-to-many association class with additional properties
public class UserMessageLink {
    [Key]
    [Column("RecieverId", Order = 0)]
    [ForeignKey("Reciever")]
    public virtual int RecieverId { get; set; }

    [Key]
    [Column("MessageId", Order = 1)]
    [ForeignKey("Message")]
    public virtual int MessageId { get; set; }

    public virtual User Reciever { get; set; }
    public virtual Message Message { get; set; }

    //This is an additional property
    public bool IsRead { get; set; }
}
0 голосов
/ 06 июня 2011

Если эти дополнительные столбцы не используются некоторыми функциями или процедурами на уровне базы данных, дополнительные столбцы в таблице ссылок будут бесполезны, поскольку они полностью невидимы на уровне Entity Framework.

Звучит так, будто вам нужно переосмыслить объектную модель.Если вам абсолютно необходимы эти столбцы, вы всегда можете добавить их позже вручную.

...