Entity Framework не может получить данные из-за исключений - PullRequest
1 голос
/ 10 августа 2011

Вот мои два POCO:

[Table("Movie", Schema= "dbo")]
public  class Movie: BaseClass
{
    public string TitleName { get; set; }

    public virtual ICollection<Actor> Actor{ get; set; }

}

[Table("Actor", Schema="dbo")]
public class Actor: BaseClass
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime? BirthDate { get; set; }
}

Базовый класс - это просто класс, имеющий свойство int id.

В базе данных есть таблица Movie и таблица Actor с таблицей MovieActor, которая служит таблицей отношений «многие ко многим». В настоящее время я просто заинтересован в том, чтобы собрать всех актеров для данного фильма. Но всякий раз, когда dbcontext пытается получить доступ к информации, я получаю следующее исключение:

"InnerException = {"Invalid column name 'Movie_Id'.\r\nInvalid column name 'Movie_Id'.\r\nInvalid column name 'Movie_Id'."}"

Я искал в StackOverflow аналогичную проблему, и они предложили (другому пользователю) использовать внешний ключ, поэтому я создал атрибут перед коллекцией Actor.

[ForeignKey("Actor")]

А потом я получаю еще одно исключение, которое говорит:

The ForeignKeyAttribute on property 'Actor' on type 
'Movie' is not valid. The foreign key name 
'Actor' was not found on the dependent type     
'Actor'.
The Name value should be a comma separated list of foreign key property names.

Кто-нибудь здесь сталкивался с этой проблемой раньше?

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

EF 4.1 Соглашения Code-First создадут отношение один-ко-многим между Movie и Actor.Поскольку вы хотите, чтобы отношение «многие ко многим», вы должны настроить это с помощью Fluent API:

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Movie>()
            .HasMany(m => m.Actor)
            .WithMany()
            .Map(a => {
                a.MapLeftKey("MovieId");  // your PK column name in Movie table
                a.MapRightKey("ActorId"); // your PK column name in Actor table
                a.ToTable("MovieActor");  // your join table name
            });
    }
}
0 голосов
/ 10 августа 2011

Пожалуйста, смотрите этот пост для получения дополнительной помощи. Я думаю, это поможет объяснить, как это сделать. Вы должны прокрутить вниз, чтобы добраться до части внешнего ключа. В основном это говорит:

С помощью внешних ключей они могут быть выставлены в модели или нет. Когда я говорю «выставлено в модели», это означает, что есть дополнительный свойство зависимого субъекта, являющееся значением принципала юридическое лицо. В приведенном ниже коде свойство PrimaryCategoryCode является открытый ключ первичной категории.

public string PrimaryCategoryCode { get; set; }

public virtual Category PrimaryCategory { get; set; }

Чтобы указать это, используйте атрибут ForeignKey в PrimaryCategory свойство следующим образом:

public string PrimaryCategoryCode { get; set; }


[ForeignKey("PrimaryCategoryCode")]
public virtual Category PrimaryCategory { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...