Як вказати назву таблиці за допомогою 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.