EF Code первый составной ключ ссылка - PullRequest
1 голос
/ 07 марта 2012

Поскольку я пытаюсь изменить приложение «Код вначале», чтобы он соответствовал многопользовательским требованиям, я в основном добавил дополнительный столбец ключа ко всем таблицам (и создав составной первичный ключ):

    [Key, Column(Order = 1)] 
    public int CompanyID { get; set; }


public class Worker
{
     [Key, Column(Order = 0)] 
    public  int WorkerID{ get; set; }
     [Key, Column(Order = 1)] 
    public int CompanyID { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual int ActivityId { get; set; }
    public virtual Activity SomeActivity { get; set; }

}

public class Activity
{
    [Key, Column(Order = 0)] 
    public int ActivityID { get; set; }
    [Key, Column(Order = 1)] 
    public int CompanyID { get; set; }

    [Required]
    [Display(Name = "Desc.")]
    public virtual string Description{ get; set; }
}

Когда EF пытаетсясоздать базу данных Я получаю сообщение об ошибке:

* Ограничение внешнего ключа 'Activity_ActActivityt' из таблицы Worker (CompanyID, ActivityId) в таблицу Activity (ActivityID, CompanyID) :: Недостаточное сопоставление: внешний ключ должен быть сопоставлен с каким-либо AssociationSet илиEntitySets, участвующие в ассоциации внешнего ключа на концептуальной стороне. *

Не могли бы вы показать мне, как отобразить эти две таблицы, учитывая, что для каждого пользователя должно быть выбрано действие.

Спасибо, Тихи

1 Ответ

2 голосов
/ 07 марта 2012

Я полагаю, что вам придется явно устанавливать сопоставления внешнего ключа, используя аннотации данных (вместо того, чтобы полагаться на соглашения), однако я не совсем уверен, сработает ли это, поскольку у вас перекрытие FK с PK.Теоретически это должно быть так:)

public class Worker
{
    [Key, Column(Order = 0)] 
    public  int WorkerID{ get; set; }
    [Key, Column(Order = 1)] 
    [ForeignKey("SomeActivity")]
    public int CompanyID { get; set; }

    [Required]
    public string Name { get; set; }

    [ForeignKey("SomeActivity")]
    public virtual int ActivityId { get; set; }
    public virtual Activity SomeActivity { get; set; }

}
...