Используя VB.NET MVC3 и метод Entity Framework «Code-First», как я могу легко определить несколько отношений «один ко многим» в одной модели? - PullRequest
0 голосов
/ 27 марта 2011

Я очень плохо знаком с ASP.NET и могу использовать некоторую помощь.

Для этого сценария у меня есть 2 класса. Один - это класс «проект», а другой - класс «компания». По сути, мне нужен один «справочник компаний» из всех компаний, с которыми мы имеем отношения, но мне нужно иметь возможность свободно распределять их по 3 различным слотам в рамках проекта. Возможно, что одна и та же компания может занимать все 3 слота, но в равной степени вероятно, что в каждом слоте будет размещаться другая компания.

Вот мои занятия:


public class Project
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int ClientID { get; set; }
    public int PublisherID { get; set; }
    public int DeveloperID { get; set; }

    public Company Client { get; set; }
    public Company Publisher { get; set; }
    public Company Developer { get; set; }
}

public class Company
{
    public int ID { get; set; }
    public string Name { get; set; }
}

Когда я использовал эту базовую схему в прошлом, сложные типы, которые я указываю в нижней половине определения модели, будут автоматически генерироваться на основе соответствующих свойств int ID, указанных ранее. Например, если бы у меня был сложный тип «Пользователь», который рисовал свои данные из пользовательской таблицы в моей базе данных, указав (int UserID) в моем классе, а затем (User User), поле UserID было бы фактическим полем в моем Таблица проекта и указанный мной объект User автоматически будут объектом, содержащим всю информацию о пользователе из пользовательской таблицы.

Использование этого метода, как я делал в классах, указанных выше, однако, работает не так, как я ожидал, а вместо этого создает не только ClientID, PublisherID и DeveloperID, но также создает CompanyID, CompanyID1 и CompanyID2, которые являются полями, которые будет фактически использоваться при попытке создания экземпляров указанных мной объектов Компании (хотя эти поля всегда будут содержать ноль).

Есть ли способ обойти это?

1 Ответ

1 голос
/ 31 марта 2011

Вам просто нужно указать, что ваши свойства int являются внешними ключами ваших свойств навигации.

public class Project
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int ClientID { get; set; }
    public int PublisherID { get; set; }
    public int DeveloperID { get; set; }

    [ForeignKey("ClientID")]
    public Company Client { get; set; }

    [ForeignKey("PublisherID")]
    public Company Publisher { get; set; }

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