SORU
7 NİSAN 2009, Salı


C dinamik numaralama#

Nasıl dinamik bir numaralama (ve daha sonra numaralama seçenekleri kullanın) oluşturun C muyum# veritabanı bir arama tablosu değerleri (kurumsal kütüphane veri katmanı kullanarak) dayalı?

Eğer veritabanında yeni bir arama değeri eklerseniz, örneğin, kod fazladan statik isimli değer beyanı eklemek zorunda istemiyorum.

Böyle bir şey var mı? Bir kod statik numaralama (The Code Project Madde başı olarak . oluşturulan yaratmak istemiyorum ^em>Enum Code Generator - Generating enum code automatically from database look up tablesve tamamen dinamik olmayı tercih ederim.

CEVAP
27 NİSAN 2009, PAZARTESİ


Bu kesin bir şey, ama yapıyorumgerekbu iş için kod oluşturma için bir tür yapmak.

Benim çözüm, bir proje ekledim"". EnumeratedTypes Bu veritabanından değerleri alır ve onlardan çeteleler inşa eden bir konsol uygulaması. Derleme için çeteleler tüm onu kaydeder.

Numaralama nesil kod şöyle:

// Get the current application domain for the current thread
AppDomain currentDomain = AppDomain.CurrentDomain;

// Create a dynamic assembly in the current application domain,
// and allow it to be executed and saved to disk.
AssemblyName name = new AssemblyName("MyEnums");
AssemblyBuilder assemblyBuilder = currentDomain.DefineDynamicAssembly(name,
                                      AssemblyBuilderAccess.RunAndSave);

// Define a dynamic module in "MyEnums" assembly.
// For a single-module assembly, the module has the same name as the assembly.
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name,
                                  name.Name   ".dll");

// Define a public enumeration with the name "MyEnum" and an underlying type of Integer.
EnumBuilder myEnum = moduleBuilder.DefineEnum("EnumeratedTypes.MyEnum",
                         TypeAttributes.Public, typeof(int));

// Get data from database
MyDataAdapter someAdapter = new MyDataAdapter();
MyDataSet.MyDataTable myData = myDataAdapter.GetMyData();

foreach (MyDataSet.MyDataRow row in myData.Rows)
{
    myEnum.DefineLiteral(row.Name, row.Key);
}

// Create the enum
myEnum.CreateType();

// Finally, save the assembly
assemblyBuilder.Save(name.Name   ".dll");

Çözüm oluşturulan bu derleme başvurusu benim diğer projeler. Sonuç olarak, kod içinde dinamik çeteleler, ıntellisense ile tam kullanabilirim.

Sonra, bir post-build bu" proje yerleşik, kendi kendine dönüyor ve "" dosya. myenums.dll oluşturur "EnumeratedTypes ondan sonra olay ekledim

Bu arada, değiştirmek için yardımcı olurdüzen oluşturunprojeniz çok "EnumeratedTypes". ilk yerleşik olan Kullanmaya başladığınızda aksi takdirde, dinamik olarak oluşturulmuş .dll, bir yapı yapmak mümkün olmayacaktır .dll şimdiye kadar silinir. (Çözüm ve sorun biraz tavuk yumurta ... diğer projelerinizde bu lazım .dll DOSYASı düzgün kurmak ve oluşturmak mümkün değil .çözümünüz...) inşa edinceye kadar dll

this msdn article yukarıdaki kodu çoğunu aldım.

Bu yardımcı olur umarım!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Break

    Break

    10 Aralık 2005
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • WK

    WK

    9 Ocak 2006