2013-04-04 13 views
5

PostgreSQL ve Npgsql ile EF CF'nin son sürümünü kullanan bir projem var.Varlık Çerçeve Kodu ile Npgsql entegrasyonu İlk

[Table("mytable")] 
public class MyTable 
{ 
    [Column("id")] 
    public int Id { get; set; } 
    [Column("mycolumn")] 
    public string MyColumn { get; set; } 
} 

Ve veritabanı/tablo/sütun gibi adlar küçük harfli etti:

CREATE TABLE mytable 
{ 
    id serial, 
    mycolumn character(50) 
} 

Npgsql Ben Veri Ek Açıklamalar kullanmanız gerekir SQL tırnak işaretleri komutları üretir gibi

Benim modelim görünüyor PostgreSQL özellikleri nedeniyle cadı can sıkıcıdır. Ancak veritabanında alıntılanan isimleri alıntı kullanmak istemiyorum.

Npgsql'yi, oluşturulan SQL'de komut üretirken veya küçük harfli tablo/sütun adlarını zorlamak için tırnak işaretleri içermemesi için bir yol var mı?

+0

Buna bir bakacağım. –

+1

Merhaba Francisco, EF6'da tabloları ve sütun adlarını küçük harflerle yazmak yerine kuralları kullanmak mümkündür, bunun yerine her birine bir özellik ekleyin, bu nedenle bu soru hakkında fazla endişelenmeyin. :) –

+0

Kod kuralları kullanarak çalışır. Neyse ki, Postgres'in sütun isminin tümü küçük harfli olduğunu gördüğünde, çift tırnakları yok sayar (Bu yüzden hala sorgulama süresinde katlanırız), ancak çift karışımayı nasıl kapatacağımızı bilmek güzel olurdu. – jhexp

cevap

8

Eğer bir şeyi özlemiyorsam - of changing the naming convention for tables jenerik yolunu mu istiyorsunuz?

Ef6 custom conventions özelliğe sahiptir - bu değil hala resmi versiyonu, ama sizin, bazı bağlantılar için çalışıyorsa ...

Senin durumunda

http://entityframework.codeplex.com/wikipage?title=Custom%20Conventions

, sizin için uygulamak zorunda kalacak sınıf/Type Sanırım - örneğin (Bazı sözde kodu) ...

1) IConfigurationConvention<Type, EntityTypeConfiguration> uygulamak (eğer Apply yılında EntityConventionBase için EF kaynağı)

2) kontrol edebilirsiniz - (Tablo adları yapılandırma yoluyla nasıl oluşturulduğunu ToTable() değiştirmek) - için .ToLowerCase()

3) gibi bir şey ... Mesela

... sözleşmelere eklemek

public class SmallCapsEntitiesConfigurationConvention 
    : IConfigurationConvention<Type, EntityTypeConfiguration> 
{ 
    public void Apply(Type memberInfo, Func<EntityTypeConfiguration> configuration) 
    { 
     configuration().ToTable(memberInfo.Name.ToLowerInvariant(), null); 
    } 
} 

Sen hiçbir fikrim yok, Aksi yaklaşık Npgsql/PostgreSQL burada
http://blog.cincura.net/233167-custom-conventions-in-entity-framework-6-helping-firebird/

bir örnek görebilirsiniz - bu bana biraz -ham‖ görünüyordu. Ama bunu EF tarafında halledebilirsin.

+0

Bu, sorunumu çözmenin güzel bir yolu! Ancak EF6 kararlı olarak piyasaya sürülmedi ve bu sürümü şirketimde kullanamıyorum. Ama yine de bunu aklımda tutacağım. –

+2

Biliyorum @ MaxBündchen - ama bence en iyisi, PostgreSQL tarafında – NSGaga

+1

'daki herhangi bir çözümden kısa, Hey, aynı problemim var ... ve EF6 şimdi çıktı! : D – matrixugly