Как указать имя таблицы с помощью Entity Framework Code First Fluent API


86

У меня есть Entity, и я должен настроить Entity Framework, чтобы сопоставить его с таблицей базы данных с другим именем.

Я легко могу сделать это с помощью Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ).

Но из-за ограничений теперь я должен использовать Code First Fluent API (мои объекты домена будут использоваться внешними клиентами, поэтому они не должны быть привязаны к конкретной технологии - например, иметь какие-либо ссылки на DataAnnotations)

Я искал в MSDN, но ничего не нашел. Так возможно ли это и как?

Спасибо.


В общем, вы должны создавать DTO (объекты передачи данных) и сопоставлять с ними свои объекты EF, вы никогда не должны использовать классы EF напрямую, если вы не работаете над небольшим / тривиальным приложением.
регги-гитара

Ответы:


96

Вы будете использовать .ToTable()метод:

modelBuilder.Entity<Department>().ToTable("t_Department");   

Источник: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx


1
я предпочитаю это, потому что я хочу, чтобы все аннотации были в одном месте
rajeemcariazo

есть ли какое-либо подтверждение того, что таблица существует? мы переименовали стол и ничего не сломалось, вы ожидаете такого поведения? очевидно, что он не может выполнять CRUD на переименованном столе, но, похоже, он ничего не ломает ...
АЗ Чад,

217

Вы также можете использовать аннотацию таблицы:

[Table("InternalBlogs")]
public class Blog

См .: Code First Data Annotations


6
Спасибо, но если вы внимательно прочитаете мой вопрос - вы увидите этот apptoach прямо посреди него :)
байрог

2
Несмотря на то, что аннотация называется «Таблица», она, похоже, отлично работает как для представлений, так и для таблиц.
Джон Шнайдер,

@JonSchneider Я просто обсуждаю здесь определения без особой причины, но представление - это таблица, доступная только для чтения.
Эрик Бергштедт

Аннотация таблицы находится в System.ComponentModel.DataAnnotations.Schema ;.
Петур Инги

Как это получило больше голосов, вопрос явно спрашивает о свободной версии api
Worthy7,

7

Используйте метод ToTable:

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public const string TableName = "MyEntity";

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}

1
Я думаю, что разбиение ваших сопоставлений на классы - самый чистый подход.
SventoryMang

1
Но тогда в вашем OnModelCreatingметоде вы должны сделать: modelBuilder.Configurations.Add(new MyEntityMap());где вместо того, чтобы вы могли просто добавить, modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");так что нет, это не самый чистый способ, если у вас также не было другого сопоставления для этого объекта.
Серж Саган
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.