Как указать имя таблицы с помощью 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.