код первого составного ключа из внешних ключей ef 4.3 - PullRequest
3 голосов
/ 15 марта 2012

У меня проблемы с созданием составного ключа из внешних ключей в коде EF 4.3.Я хотел бы решить эту проблему с помощью аннотаций данных.Я не могу найти правильные аннотации данных, в которых говорится, что EventID является внешним ключом к событию и является частью первичного ключа в таблице EventVote.Как выполнить это

   public class EventVote
{

    [Key, Column(Order = 0)]
    [ForeignKey("Event")]
    public int EventID { get; set; }

    [Key, Column(Order = 1)]
    [ForeignKey("User")]
    public int UserID { get; set; }

    [Required]
    public DateTime VoteTime { get; set; }

    [Required]
    public bool Vote { get; set; }



    public virtual Event Event { get; set; }
    public virtual User User { get; set; }
}

ошибка Введение ограничения FOREIGN KEY 'EventVote_User' в таблицу 'EventVotes' может вызвать циклы или несколько путей каскада.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY.Не удалось создать ограничение.Смотрите предыдущие ошибки.

1 Ответ

3 голосов
/ 15 марта 2012

Попробуй это.Вы также можете разместить аннотацию ForeignKey в свойстве навигации и ссылаться на имя FK.Не уверен, что это решит вашу проблему, но стоит попробовать IMO

public class EventVote
{

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

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

    [Required]
    public DateTime VoteTime { get; set; }

    [Required]
    public bool Vote { get; set; }


    [ForeignKey("EventID")]
    public virtual Event Event { get; set; }
    [ForeignKey("UserID")]
    public virtual User User { get; set; }
}

Редактировать: из вашего сообщения об ошибке звучит, как будто у вас есть проблема, похожая на то, что происходит с отображениями отношений один-к-одному.См. Эту статью о том, как указать использование свободного API для отключения каскадирования на одной стороне каждого из отношений.

См. Эту статью, в которой рассматривается эта проблема.Обратите внимание, что они используют Fluent API, который можно использовать вместо аннотаций данных, чтобы указать ваши сопоставления / связи, или вы можете использовать аннотации данных и просто использовать Fluent API для отключения каскадирования / обновлений, где это необходимо.

http://weblogs.asp.net/manavi/archive/2011/05/01/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations.aspx

...