как иметь несколько FK в одной таблице / классе с кодом EF4 первым - PullRequest
1 голос
/ 24 февраля 2011

У меня есть эти 2 таблицы:

create table countries
(
int id identity primary key,
name nvarchar(20)
)

create table persons
(
int id identity primary key,
country1 int references countries(id),
country2 int references countries(id),
country3 int references countries(id)
)

как мне создать свои классы и отображения для того, чтобы правильно отобразил их в эти таблицы ? (Сначала я использую EF4 CTP5 Code)

1 Ответ

2 голосов
/ 24 февраля 2011

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

public class Country
{
    [Key]
    public int CountryID { get; set; }

    [MaxLength(20)]
    public string Name { get; set; }
}

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

    [MaxLength(20)]
    public string Name { get; set; }

    public Country Country1 { get; set; }
    public Country Country2 { get; set; }
    public Country Country3 { get; set; }
}

Конечно, вам также понадобится DbContext:

public class Context : DbContext
{
    public DbSet<Person> People { get; set; }
    public DbSet<Country> Countries { get; set; }

    public Context(string dbName)
        :base (dbName)
    {
    }
}

Это приведет к тому, что схемы таблиц будут отражать ваше исходное требование.

Обратите внимание, что если вы объявите классы следующим образом:

public class Country
{
    [Key]
    public int CountryID { get; set; }

    [MaxLength(20)]
    public string Name { get; set; }

    public ICollection<Person> People { get; set; }
}

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

    [MaxLength(20)]
    public string Name { get; set; }

    public ICollection<Country> Countries { get; set; }
}

В этом случае EF создаст таблицу соединения «многие ко многим», которая позволит вам связать любое количество стран с любым количеством людей:

CREATE TABLE [CountryPersons] 
(
    [CountryCountryID] int NOT NULL,
    [PersonPersonID] int NOT NULL
);

Обратите внимание, что EF определяет отношение многих ко многим из-за сбора людей в странах и сбора стран в людях.

НТН.

...