Entity Framework Code First Fluent API ile tablo adı nasıl belirtilir


86

Bir Varlığım var ve Entity Framework'ü farklı bir ada sahip bir veritabanı tablosuyla eşlemek için yapılandıracağım.

Bunu Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute ) ile kolayca yapabilirim .

Ancak sınırlamalar nedeniyle artık Code First Fluent API kullanmam gerekiyor (etki alanı nesnelerim harici istemciler tarafından kullanılacak, bu nedenle teknolojiye özgü olmamalı - örneğin DataAnnotations'a herhangi bir referans içermemelidir)

MSDN'de aradım ama hiçbir şey bulamadım. Peki mümkün mü ve nasıl?

Teşekkür ederim.


Genel olarak, DTO'lar (veri aktarım nesneleri) oluşturmalı ve EF nesnelerinizi bunlarla eşlemelisiniz, küçük / önemsiz bir uygulama üzerinde çalışmadığınız sürece EF sınıflarını asla doğrudan kullanmamalısınız.
reggaeguitar

Yanıtlar:


96

.ToTable()Yöntemi kullanacaksınız :

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

Kaynak: MSDN: http://msdn.microsoft.com/en-us/data/jj591617.aspx


1
bunu tercih ediyorum çünkü tüm açıklamaları tek bir yerde istiyorum
rajeemcariazo

tablonun var olduğuna dair herhangi bir doğrulama var mı? bir masayı yeniden adlandırdık ve hiçbir şey kırılmadı, beklediğiniz davranış bu mu? Açıkçası yeniden adlandırılan masada CRUD yapamaz, ancak hiçbir şeyi bozmaz gibi görünüyor ...
AZ Chad

220

Ayrıca Tablo açıklamasını da kullanabilirsiniz:

[Table("InternalBlogs")]
public class Blog

Bkz: Code First Veri Ek Açıklamaları


6
Thx, ama sorumu dikkatlice okursanız - bu uygulamanın doğrudan ortasında olduğunu göreceksiniz :)
bairog

2
Ek açıklamanın adı "Tablo" olsa da, tablolar için olduğu kadar görünümler için de iyi çalışıyor gibi görünüyor.
Jon Schneider

@JonSchneider Burada özellikle sebepsiz yere tanımları tartışıyorum, ancak bir görünüm salt okunur bir tablodur.
Erik Bergstedt

Tablo ek açıklaması System.ComponentModel.DataAnnotations.Schema; içinde bulunur.
Pétur Ingi Egilsson

Bu nasıl daha fazla olumlu oy aldı, soru açıkça akıcı api sürümünü soruyor
Worthy7

7

ToTable yöntemini kullanın:

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

    public MyEntityMap()
    {                   
        ToTable(TableName);

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

1
Eşleştirmelerinizi sınıflara ayırmanın en temiz yaklaşım olduğunu düşünüyorum.
SventoryMang

1
Ama sonra OnModelCreatingyönteminizde yapmanız gereken: modelBuilder.Configurations.Add(new MyEntityMap());yerine modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");çok hayır ekleyebilirdiniz, bu varlık için yapacak başka bir eşlemeniz yoksa bu daha temiz bir yol değildir.
Serj Sagan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.