2009-03-12 16 views
1

Herkes, C# (.net 3.5) etki alanı modelinden veritabanı şeması oluşturma konusunda deneyime sahip mi? Araçlardan hangileri en temiz senaryoyu üretir?DomainModel'den Veritabanı Şeması

Telerik OpenAccess ORM tamam olurdu ancak özellik alanları .net 3.5 örtülü özel alanları kullanıyorsa, C# sınıflarından temiz sütun adları üretmiyor.

Sadece daha sonra el ile geliştirmek ve sürdürmek olacak bir başlangıç ​​komut dosyası genine ihtiyacım var.

P

+0

etki alanı modeli koduna erişim var mı? Sınıf ve özelliklere nitelikler ekleyebilir misiniz? –

+0

Her durumda, kaynak kodu erişilebilir değilse, Ryan, xml ile öznitelikleri eşleyebilirsiniz. Benim gibi, son seçenek olarak xml yaparsanız, IEnumerable döndüren her etki alanı sınıfı için uzantı yöntemleri oluşturabilirsiniz. Yine de, chuning için teşekkürler. –

cevap

2

Yansımayla yeni oluşturdum. Şaşırtıcı bir şekilde düşündüğümden daha az çaba harcadım, bir kere düşünüp düşünmeye başladım.

ben yaptım nasıl (aka: algoritma)

  1. Yük düzeneği. mecliste her Sınıfı (Tip) => oluşturmak tablo için

  2. => alanı eklemek oluşturmak sınıftaki her olsun/set özellik için $ {className} kimliği

  3. olarak birincil anahtarı oluşturun (map özellik türü db türü)

  4. Yabancı anahtar özel özniteliklerini class => Eğer varsa, anahtar ekleyin. fk_index olarak (Özel öznitelik ayarlayın imza

  5. Diğer kısıtlamalar (örneğin alın [ForeignKey ("TableA, TABLEB")] gibidir: kontrol edin) özel niteliklerini => üretmek uygun

  6. Eğer yoksa kaynak koduna erişebilir, bu eşlemeleri xml'den okuyabilirsiniz. ***** Edit: Eğer xml sizin için her zaman son seçenek bir çözümse (benim için olduğu gibi), sınıflarınızda IEnumerable < Özniteliği > Bu durumda, Öznitelik yüzeyiniz, çek ve benzersiz sınırlamalar söz konusu olduğunda alan adını saklamak için 'string TargetProperty {get; set;}' özelliğini içermelidir. *****

That's it !!

İpuçları:

MONTAJ YÜKLENİYOR: Ah! Bu arada, bir yükleme sistemi, yükleme programının nerede bulacağı tüm montaj bağımlılıklarının sağlanmasını sağlamak olacaktır. Unutmayın, Visual Studio bu dinamik yük senaryosundaki bağımlılıkları çözmenize yardımcı olamaz. Komut satırında csc.exe çalıştırıyormuş gibi düşünün. Derleme yükleme sorunları olursa, etki alanı modeli derlemesinin her bir iç bağımlılığının, yükleme programının bulabileceği yerlerde bulunduğundan emin olun.

TÜR MAPPING: NULL türüne NULL türünde NULL değil, NULL türüne ayarlanır. Dize türleri nvarchar (max) olarak ayarlanmıştır. Parayı istediğiniz gibi ondalık veya ikiye eşleyin, harita boolunu bit veya eşdeğeriyle eşleyin, DateTime'ı datetime için eşleyin, Map byte [] 'dan ikiliye, uzunluğa (x, 0) eşleyin ve int için harita int.

APP MİMARİSİ: Anında ihtiyacım olan çözümüme bir konsol uygulaması eklemek benim için kolaydı, ancak daha sonra, diğer projelere kolayca geçiş yapabilmesini sağlamak için giriş argsleri sağlamak isteyebilirsiniz.Bunu düzeltmek için, kod özniteliğine sahip olmanız gerekir, bu da özel niteliklerinizi bildirecek, aksi halde tür özelliklerinde de geçiş yapmak veya özel öznitelikler için yapılandırma bölümleri ayarlamak isteyebilirsiniz. Kullanmak ve yapılandırmak ve tekrar kodgen programı tam olarak ne geri döndüğünü bilir.

Bu yardımcı olur umarım.

P

+0

Harika, montajları yürütmek için Varlıklar'ı LINQ kullandınız mı? – RobS

+0

Hayır. Sadece Assembly.Lef (...) ve System.Reflection –

0

P

kullandığım Yansıma, İçe (FxCop SDK) ve CodeModel (Visual Studio Automation) bir similar problem çözmek için. Bu sırayla bir API'dan diğerine geçtim ve CodeModel'i çok beğendim. Yansıma ile ilgili sorun, AppDomain yüklendiği sürece derlemeleri bellekte kilitlemesidir. Bu, T4'te bir sorun olsa da, bağımsız uygulamanızla birlikte olmayabilir. T4 ile meta verilerden kod oluşturduktan sonra orijinal derlemeyi yeniden derleyemezsiniz. Introspection iyi çalıştı, meclisleri kilitlemedi, ancak hala belgelenmiyor, ayrıca meta verilerini kullanmadan önce derlemeyi derlemenizi gerektiriyor. CodeModel her ikisi de belgelidir ve metadata doğrudan C# kaynak kodundan erişmenize izin verir. Bu yardımcı olur

Umut, Oleg

+0

'daki tipler kullanıldı. Teşekkürler, Oleg: Bu sorunu belki de almadım ve console.app senaryoları ile beklemiyorum. Yine de T4 hakkındaki yorumunuz ilginç. Sadece ASP.NET MVC adamlarının bunu nasıl t4 ile yaptığını merak ediyorum. Bu arada, hedef türleri yerel olarak kopyaladıysanız bu kilitleme sorununun devam edeceğini düşünüyor musunuz? –

İlgili konular