EF FKs на композитных ключах - PullRequest
1 голос
/ 21 июня 2019

У меня есть 2 сущности, которым нужны FK друг на друга:

public class MessagesGroup
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long GroupId { get; set; }

    public string Title { get; set; }
    public DateTime Created { get; set; }
    public int? LastMessageId { get; set; }

    [Required]
    [ForeignKey("GroupId,LastMessageId")]
    public virtual Messages Message { get; set; }
}

public class Messages
{
    [Key]
    [Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long GroupId { get; set; }

    [Key]
    [Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int MessagesId { get; set; }

    public int UserId { get; set; }

    [StringLength(2000)]
    public string Text { get; set; }

    public DateTime Date { get; set; }

    [StringLength(255)]
    public string AttachmentUrl { get; set; }

    [Required]
    [ForeignKey("GroupId")]
    public virtual MessagesGroup MessageGroup { get; set; }

    [Required]
    [ForeignKey("GroupId,UserId")]
    public virtual MessagesGroupUsers MessagesGroupUsers { get; set; }
}

Как получить FK для обеих сущностей, потому что теперь я получаю ошибку

Невозможно определитьосновной конец ассоциации между типами 'MDC.Repository.Model.Messages' и 'MDC.Repository.Model.MessagesGroup'.Основной конец этой ассоциации должен быть явно сконфигурирован с использованием либо API-интерфейса связи, либо аннотаций данных. И я попробовал другие решения, ничего не помогло, появились только новые ошибки.

РЕДАКТИРОВАТЬ

Я попробовал это решение

public class MessagesGroup
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long GroupId { get; set; }

    public int? LastMessageId { get; set; }

    public virtual Messages Message { get; set; }
}

public class Messages
{
    [Key]
    [Column(Order = 0)]
    [ForeignKey("MessageGroup")]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long GroupId { get; set; }

    [Key]
    [Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int MessagesId { get; set; }

    public int UserId { get; set; }

    [Required]
    public virtual MessagesGroup MessageGroup { get; set; }

    [Required]
    [ForeignKey("GroupId,UserId")]
    public virtual MessagesGroupUsers MessagesGroupUsers { get; set; }
}

И теперь я получаю

Кратность недопустима в роли 'Messages_MessageGroup_Source' в отношении 'Messages_MessageGroup'.Поскольку свойства зависимой роли не являются ключевыми свойствами, верхняя граница кратности зависимой роли должна быть «*».

И, глядя на это новое сообщение, я чувствую, что он может »t сопоставить с msgGroupId, но я не могу понять, почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...