MVC - Структура сущности - отношение метаданных - PullRequest
0 голосов
/ 19 декабря 2011

Сегодня я работаю с MVC впервые. Также обычно я сначала использую EF с моделью, но я хотел попробовать POCO.

Итак, я создал 3 объекта, и при попытке создать контроллер я получаю сообщение об ошибке:

Невозможно получить метаданные для "BookExchange.Models.Exchange". Невозможно определить основной конец ассоциации между типами "BookExchange.Models.Exchange" и "BookExchange.Models.Book". Основной конец этой ассоциации должен быть явно сконфигурирован с использованием API свободного взаимодействия или аннотаций данных.

Мои 3 класса:

public class Book
{
    public int BookID { get; set; }
    public string Name { get; set; }
    public string Author { get; set; }
    public string ISBN10 { get; set; }

    public int PersonID { get; set; }
    public virtual Person Person { get; set; }

    public virtual Exchange Exchange { get; set; }
}

public class Person
{
    public int PersonID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Book> Books { get; set; }
    public virtual ICollection<Exchange> Exchanges { get; set; }
}

public class Exchange
{
    [Key]
    public int BookID { get; set; }

    public int PersonID { get; set; }
    public DateTime ReturnDate { get; set; }

    public virtual Person Person { get; set; }
    public virtual Book Book { get; set; }
}

Кто-нибудь знает, что я делаю не так? Я не хочу терять свойства ассоциации.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 21 декабря 2011

Попробуйте: (Удалить базу данных, чтобы EF создала новую)

public class Book
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Author { get; set; }
    public string ISBN { get; set; }

    public virtual Person Person { get; set; }
    public virtual Exchange Exchange { get; set; }
}

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Book> Books { get; set; }
    public virtual ICollection<Exchange> Exchanges { get; set; }
}

public class Exchange
{    
    public int Id { get; set; }   
    public DateTime ReturnDate { get; set; }

    public virtual Person Person { get; set; }
    public virtual Book Book { get; set; }
}
0 голосов
/ 21 декабря 2011

Это ваша связь один на один.

Удалите одну ссылку между обменом или книгой, чтобы Code-first мог решить, какой из них более важен в вашем отношении на одно отношение (Book <-> Exchange)

Если вы хотите знать, почему, , вам следует прочитать это:

0 голосов
/ 19 декабря 2011

Попробуйте добавить свойства внешнего ключа для ваших ссылок.Например,

public class Book
{
    public int BookID { get; set; }
    public string Name { get; set; }
    public string Author { get; set; }
    public string ISBN10 { get; set; }

    public virtual Person Person { get; set; }
    public int PersonID { get; set; }
    public virtual Exchange Exchange { get; set; }
    public int ExchangeID { get; set; }
}

public class Person
{
    public int PersonID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Book> Books { get; set; }
    public virtual ICollection<Exchange> Exchanges { get; set; } 
}

public class Exchange
{
    public int ExchangeID { get; set; }

    public int BookID { get; set; }
    public virtual Book Book { get; set; }
    public int PersonID { get; set; }
    public virtual Person Person { get; set; }

    public DateTime ReturnDate { get; set; }
}

Кроме того, взгляните на сообщение ScottGu о коде сначала и в этом сообщении EF о соглашениях .

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