2016-12-24 3 views
5

Я использую EF 6, есть два простых класса POCO, как показано ниже:Entity Framework имя таблицы условность

public class Person 
{ 
    public int PersonId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

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

и мой контекст

public class Context : DbContext 
{ 
    public Context() : base("name=codefirst") 
    { 

    } 
    public DbSet<Person> People { get; set; } 
    public DbSet<Company> Corporation { get; set; } 
} 

И EF генерироваться таблицы: dbo.Companies и dbo.People

Мой вопрос: почему одно имя таблицы - это люди, а другое имя таблицы - компании (я знаю, почему это плюрализовано). Я имею в виду, что одна таблица использует имя свойства, а другая таблица использует имя класса?

Заранее благодарен!

enter image description here

+0

Оба используют имя типа, только они плюрализованы. Множество «Личность» - это «Люди» – haim770

ответ

4

Оба отображаются с помощью их имя класса.
Тот, который, вероятно, смутил вас, является отображением класса Person. Это одно из правил плюрализации EF, поскольку люди - это множественная форма человека (что означает более одного человека), EF отображает его как Люди. С другой стороны, он просто сопоставил класс Компании с компаниями.

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

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

+0

OP знает, что EF делает плюрализацию при создании таблиц, и он не хочет останавливать ее. – RBT

+0

@RBT Да, но он ожидал, что класс Person будет отображаться как Лица. Я объяснил, что этого не будет. – Gimballock

+0

спасибо. Теперь понятно. –

1

Entity Framework (EF) модель строитель всегда относится к вашим именам классов, а создание таблиц в базе данных в первом подходе кода. В вашем случае это Person и Company. EF никогда не ссылается на свойства вашего контекстного класса при создании таблиц базы данных.

При создании таблицы, он пытается множественным число имен так Person получили множественные к People и Company получил множественный к Companies.

Как быстрая проверка, если вы измените имя своего класса Company на Corporation, тогда имя таблицы будет создано как Corporations. Я также изменил соответствующее имя свойства Corporation в контексте класса FooBar

Вот что я сделал, чтобы проверить:

public class Person 
{ 
    public int PersonId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 
public class Corporation 
{ 
    public int CorporationId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Context : DbContext 
{ 
    public Context() : base("name=codefirst") 
    { 

    } 
    public DbSet<Person> People { get; set; } 
    public DbSet<Corporation> FooBar { get; set; } 
} 

EF теперь идет вперед и создает Corporations таблицу вместо (множественное число от Corporation) и полностью игнорирует имя свойства FooBar, которое присутствует в классе контекста.

В вашем коде это было простое совпадение, которое вы назвали свойством в своем контексте, как People, которые имеют множественное число Person. Это смутило вас и застало вас думать.

Смежные вопросы