Як вказати назву таблиці за допомогою API першого вільного коду Entity Framework


86

У мене є Entity, і я повинен налаштувати Entity Framework, щоб зіставити його з таблицею бази даних з іншим іменем.

Я легко можу зробити це за допомогою Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ).

Але через обмеження зараз мені доводиться використовувати API API First Fluent (мої об’єкти домену будуть використовувати зовнішні клієнти, тому вони не повинні бути специфічними для технологій - наприклад, мати посилання на DataAnnotations)

Я шукав на MSDN, але нічого не знайшов. То чи можливо це і як?

Дякую.


Як правило, ви повинні створювати DTO (об'єкти передачі даних) і зіставляти свої об'єкти EF з ними, ви ніколи не повинні використовувати EF-класи безпосередньо, якщо ви не працюєте над невеликим / тривіальним додатком.
реггігітара

Відповіді:


96

Ви будете використовувати .ToTable()метод:

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

Джерело: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx


1
я віддаю перевагу цьому, тому що хочу всі
анотації

чи існує якась перевірка існування таблиці? ми перейменували таблицю, і нічого не зламалося, це така поведінка, яку ви очікуєте? він, очевидно, не може робити CRUD на перейменованому столі, але, здається, нічого не порушує ...
AZ Чад

217

Ви також можете використовувати анотацію Таблиця:

[Table("InternalBlogs")]
public class Blog

Див .: Анотації перших даних коду


6
Thx, але якщо ви уважно прочитаєте моє запитання - ви побачите цей додаток прямо посередині :)
bairog

2
Незважаючи на те, що анотація має назву "Таблиця", вона, здається, чудово працює як для подань, так і для таблиць.
Джон Шнайдер,

@JonSchneider Я тут просто аргументую визначення без жодної причини, але подання - це таблиця лише для читання.
Ерік Бергштедт

Анотація таблиці знаходиться в System.ComponentModel.DataAnnotations.Schema ;.
Pétur Ingi Egilsson

Як це отримало більше голосів, питання чітко задає
вільну

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");так ні, це не чистіший спосіб, якщо у вас також не було іншого відображення для цієї сутності.
Serj Sagan,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.