Aracılığıyla paylaş


Gezinme ve Program kodunda bir modeli güncelleştiriliyor

Modeli öğeleri sil, bunların özelliklerini ayarlamak ve oluşturulur ve öğeleri arasındaki bağlantıları silmek için kod yazabilirsiniz.Tüm değişiklikleri bir hareket içinde yapılması gerekir.Öğe bir çizim görüntülerse, Diyagram "otomatik olarak işlemin sonunda giderilecektir".

Bu konuda

Örneğin dsl tanımı

Model gezinme

Sınıf bilgilerine erişme

Hareketteki değişiklikleri gerçekleştirme

Modeli öğeler oluşturma

İlişki bağlantılar oluşturma

Öğeleri silme

İlişki bağlantılarını silme

Bir ilişkinin bağlantıları yeniden sıralama

Kilitleri

Kopyala ve Yapıştır

Gezinme ve diyagramları güncelleştiriliyor

Şekiller ve öğeleri arasında gezinme

Özelliklerinin şekilleri ve bağlayıcıları

DocView ve DocData

Şekiller, bağlayıcılar ve diyagramları ve ilişkilerini modeli öğeler için ayrı bir bölümde açıklanmıştır.Daha fazla bilgi için bkz. [yönlendirme] Nasıl yapılır: gidin ve bir diyagram Güncelleştir.

Örneğin dsl tanımı

Bu ana DslDefinition.dsl için bu konudaki örneklerde parçasıdır:

DSL Definition diyagramı - Aile Ağacı Modeli

Bu model, bu dsl örneğidir:

Tudor Aile Ağacı Modeli

Cc512845.collapse_all(tr-tr,VS.110).gifBaşvurular ve ad alanları

Bu konudaki kod çalıştırmak için başvuru:

Microsoft.VisualStudio.Modeling.Sdk.11.0.dll

Kodunuzu bu ad alanı kullanır:

using Microsoft.VisualStudio.Modeling;

Buna ek olarak, dsl tanımlı olandan başka bir proje kodu yazıyorsanız, Dsl project tarafından oluşturulan derlemenin almanız gerekir.

Model gezinme

Cc512845.collapse_all(tr-tr,VS.110).gifÖzellikler

dsl tanımında tanımlamak etki alanı özellikleri program kodunda erişebilirsiniz özellikleri haline gelir:

Person henry = ...;

if (henry.BirthDate < 1500) ...

if (henry.Name.EndsWith("VIII")) ...

Bir özelliği ayarlamak isterseniz, bunu içinde yapmanız gerekir bir hareket:

henry.Name = "Henry VIII";

Eğer dsl tanımının, bir özelliği de tür olan hesaplanan, ayarlayamazsınız.Daha fazla bilgi için bkz. Hesaplanan ve özel depolama özellikleri.

Cc512845.collapse_all(tr-tr,VS.110).gifİlişkiler

dsl tanımında tanımlayan ilişkiler etki alanı bir ilişkinin her iki ucunda sınıf özellik çiftleri haline gelir.Özellik adlarını DslDefinition şemada roller her tarafında ilişki etiketleri olarak görüntülenir.Rol iþlenenlerle bağlı olarak, özelliği ilişkinin diğer uçta sınıfı veya o sınıfın bir koleksiyon türüdür.

foreach (Person child in henry.Children) { ... }

FamilyTreeModel ftree = henry.FamilyTreeModel;

Ters İlişki ucundaki özellikleri her zaman, devrik.Bir bağlantı oluşturulduğunda veya silindiğinde, her iki öğe rolü özellikleri güncelleştirilir.Aşağıdaki deyim (uzantılarını kullanır System.Linq) her zaman için örnek ParentsHaveChildren ilişkisinde geçerlidir:

(Person p) => p.Children.All(child => child.Parents.Contains(p))

&& p.Parents.All(parent => parent.Children.Contains(p));

ElementLinks.Bir ilişki adlı bir model öğesi tarafından temsil edilen bir bağlantı, etki alanı ilişki türünün bir örneği olduğu.Bir bağlantı her zaman bir kaynak öğesi ve bir hedef öğe vardır.Kaynak öğesinde ve hedef öğe aynı olabilir.

Bağlantı ve özelliklerine erişebilirsiniz:

ParentsHaveChildren link = ParentsHaveChildren.GetLink(henry, edward);

// This is now true:

link == null || link.Parent == henry && link.Child == edward

Varsayılan olarak, birden fazla örneğini bir ilişki modeli öğeleri herhangi bir çift bağlantı izin verilir.Ancak dsl tanımı ise, Allow Duplicates bayrağı ilişkisi için doğru ise, birden fazla bağlantı olabilir ve kullanmanız gerekir GetLinks:

foreach (ParentsHaveChildren link in ParentsHaveChildren.GetLinks(henry, edward)) { ... }

Bağlantıları erişmek için diğer yöntemleri de vardır.Örne?in:

foreach (ParentsHaveChildren link in ParentsHaveChildren.GetLinksToChildren(henry)) { ... }

Gizli rolleri. dsl tanımında ise, Özellik oluşturulur olan yanlış belirli bir rol için sonra hiçbir özelliği bu role karşılık gelen oluşturulur.Ancak, yine de bağlantılar erişebilir ve ilişki yöntemleri kullanarak bağlantılar:

foreach (Person p in ParentsHaveChildren.GetChildren(henry)) { ... }

En sık kullanılan örnek PresentationViewsSubject modeli öğe üzerinde bir diyagram görüntüler şekli bağlar ilişki:

PresentationViewsSubject.GetPresentation(henry)[0] as PersonShape

Cc512845.collapse_all(tr-tr,VS.110).gifÖğe dizini

Öğe dizini kullanarak deposundaki tüm öğeleri erişebilirsiniz:

store.ElementDirectory.AllElements

Aşağıdaki gibi öğeleri bulmak için kullanılan yöntemlerin vardır:

store.ElementDirectory.FindElements(Person.DomainClassId);

store.ElementDirectory.GetElement(elementId);

Sınıf bilgilerine erişme

Sınıflar, ilişkileri ve dsl tanımı diğer yönleri hakkında bilgi edinebilirsiniz.Örne?in:

DomainClassInfo personClass = henry.GetDomainClass();

DomainPropertyInfo birthProperty =

personClass.FindDomainProperty("BirthDate")

DomainRelationshipInfo relationship =

link.GetDomainRelationship();

DomainRoleInfo sourceRole = relationship.DomainRole[0];

Modeli öğeleri ata sınıfları aşağıdaki gibidir:

  • ModelElement - tüm öğeleri ve ilişkileri olan ModelElements

  • ElementLink - ElementLinks tüm ilişkileri olan

Hareketteki değişiklikleri gerçekleştirme

Program kodunuzu deposundaki bir şey değiştiğinde bunu bir işlem içinde yapmalısınız.Bu, tüm modeli öğeleri, ilişkilerini, şekiller, diyagramları ve bunların özelliklerini geçerlidir.Daha fazla bilgi için bkz. Transaction.

Bir hareket yönetmenin en uygun yöntem olan bir using deyimi içine bir try...catch ifadesi:

Store store; ...
try
{
  using (Transaction transaction =
    store.TransactionManager.BeginTransaction("update model"))
    // Outermost transaction must always have a name.
  {
    // Make several changes in Store:
    Person p = new Person(store);
    p.FamilyTreeModel = familyTree;
    p.Name = "Edward VI";
    // end of changes to Store

    transaction.Commit(); // Don't forget this!
  } // transaction disposed here
}
catch (Exception ex)
{
  // If an exception occurs, the Store will be 
  // rolled back to its previous state.
}

Herhangi bir sayıda bir hareket içinde değişiklik yapabilirsiniz.Etkin bir işlem içinde yeni hareketler açabilirsiniz.

Yaptığınız değişiklikleri kalıcı hale getirmek için şunları yapmalısınız: Commit , atılmadan önce hareket.İşlem içinde yakalanan olmayan bir özel durum oluþursa, deposu değişikliklerden önce durumuna sıfırlanır.

Modeli öğeler oluşturma

Bu örnek, varolan bir modeli bir öğe ekler:

FamilyTreeModel familyTree = ...; // The root of the model.       
using (Transaction t =
    familyTree.Store.TransactionManager
    .BeginTransaction("update model"))
{
  // Create a new model element 
  // in the same partition as the model root:
  Person edward = new Person(familyTree.Partition);
  // Set its embedding relationship:
  edward.FamilyTreeModel = familyTree;
          // same as: familyTree.People.Add(edward);
  // Set its properties:
  edward.Name = "Edward VII";
  t.Commit(); // Don't forget this!
}

Bu örnekte, öğe oluşturma hakkında bu önemli noktaları gösterilmektedir:

  • Yeni öğe belirli bir depo bölümünde oluşturun.Modeli öğeleri ve ilişkileri ancak şekilleri değil, genellikle varsayılan bölüm budur.

  • Gömme bir ilişkinin hedef sağlamak.Bu örneğin DslDefinition, her kişinin ilişki FamilyTreeHasPeople gömme hedef olmalıdır.Bunun için biz kişi nesnesinin FamilyTreeModel rol özelliğini ayarlamak veya kişinin FamilyTreeModel nesnesinin kişilerin rolü özelliğine ekleyin.

  • Özellik özellikle kendisi için yeni bir öğe özelliklerini IsName DslDefinition içinde geçerlidir.Bu bayrak, öğenin sahibi içinde benzersiz olarak tanımlanmasını sağlar özelliği işaretler.Bu durumda, Name özelliği, bu bayrağı vardır.

  • Bu dsl dsl tanımı deposuna yüklenmiş olmalıdır.Bir menü komutu gibi bir uzantı yazıyorsanız, bu genellikle zaten doğru olacaktır.Diğer durumlarda açık deposuna modeli, veya kullanmak ModelBus bunu yüklemek için.Daha fazla bilgi için bkz. Nasıl yapılır: Program kod dosyasından Model Aç.

Bu şekilde bir öğe oluşturduğunuzda, (dsl bir diyagram varsa) şeklinde otomatik olarak oluşturulur.Varsayılan Şekil, renk ve diğer özellikleri otomatik olarak atanan bir konumda görünür.Nereye ve nasıl ilişkili şekli görünür denetlemek istiyorsanız bkz: bir öğe ve şeklini oluşturma.

İlişki bağlantılar oluşturma

dsl tanım örnekte tanımlanan iki ilişkileri vardır.Her ilişki tanımlar bir rolü özelliği sınıfı ilişkinin her iki ucunda.

Bir ilişkinin bir örneği oluşturmanın üç yolu vardır.Üç bu yöntemlerin her biri, aynı etkiye sahiptir:

  • Kaynak rolü player özelliğini ayarlayın.Örne?in:

    • familyTree.People.Add(edward);

    • edward.Parents.Add(henry);

  • Hedef rol player özelliğini ayarlayın.Örne?in:

    • edward.familyTreeModel = familyTree;

      Bu rol iþlenenlerle olan 1..1, böylece biz değerini atayın.

    • henry.Children.Add(edward);

      Bu rol iþlenenlerle olan 0..*, biz koleksiyonuna eklemek için.

  • Açıkça ilişkinin bir örneğini oluşturun.Örne?in:

    • FamilyTreeHasPeople edwardLink = new FamilyTreeHasPeople(familyTreeModel, edward);

    • ParentsHaveChildren edwardHenryLink = new ParentsHaveChildren(henry, edward);

En son yöntem, ilişkinin kendisini özelliklerini ayarlamak istiyorsanız, yararlıdır.

Bu şekilde bir öğe oluşturduğunuzda, bir bağlayıcı Diyagram üzerinde otomatik olarak oluşturulur, ancak varsayılan şekil, renk ve diğer özellikleri vardır.İlişkili bağlayıcı nasıl oluşturulduğunu kontrol etmek için bkz: bir öğe ve şeklini oluşturma.

Öğeleri silme

Çağırarak bir öğe silmek Delete():

henry.Delete();

Bu işlem de silinmesine neden olur:

  • İlişki bağlantıları ve öğeden.Örneğin, edward.Parents artık içerecek henry.

  • Öğeleri hangi için roller en PropagatesDelete bayrağı doğrudur.Örneğin, öğe görüntüler Şekil silinir.

Varsayılan olarak, her gömme ilişkisine sahip PropagatesDelete hedef rolü true.Silme henry silme familyTree, ama familyTree.Delete() tümünü silmek Persons.Daha fazla bilgi için bkz. Silme davranışı özelleştirme.

Varsayılan olarak, PropagatesDelete başvuru ilişki rolleri için geçerli değildir.

Bir nesneyi sildiğinizde, özel yayılma atlamak silme kuralları neden olabilir.Bunun için başka bir öğe yerine yararlıdır.GUID için silme değil yayılması bir veya daha fazla rol sağlayın.GUID ilişki sınıfından elde edilebilir:

henry.Delete(ParentsHaveChildren.SourceDomainRoleId);

(Çünkü bu belirli örnek herhangi bir etkisi yoktur PropagatesDelete olan false rolleri için ParentsHaveChildren ilişkisi.)

Bazı durumlarda, silme, lock öğesinin veya yayma tarafından silinecek kayıtlardan bir öğe varlığını tarafından engellenir.Kullanabileceğiniz element.CanDelete() öğesi silinmiş olup olmadığını denetlemek için.

İlişki bağlantılarını silme

Rol özelliğinden bir öğeyi kaldırarak bir ilişki bağlantıyı silebilirsiniz:

henry.Children.Remove(edward); // or:

edward.Parents.Remove(henry); // or:

Bağlantıyı açıkça de silebilirsiniz:

edwardHenryLink.Delete();

Tüm bu üç yöntem aynı etkiye sahiptir.Bunlardan birini kullanmak yeterlidir.

Rol 0..1 veya 1..1 multiplicity varsa ayarlayabilirsiniz null, ya da başka bir değer:

edward.FamilyTreeModel = null;/ / veya:

edward.FamilyTreeModel = anotherFamilyTree;

Bir ilişkinin bağlantıları re-ordering

Belirli bir sıra bağlantılar kaynaklanan veya belirli bir modeli öğede hedeflenmiş belirli bir ilişki vardır.Eklenmiş olan sırada görünürler.Örneğin, bu ifade aynı sırada çocuklar her zaman sonucunu verir:

foreach (Person child in henry.Children) ...

Bağlantıların sırasını değiştirebilirsiniz:

ParentsHaveChildren link = GetLink(henry,edward);

ParentsHaveChildren nextLink = GetLink(henry, elizabeth);

DomainRoleInfo role =

link.GetDomainRelationship().DomainRoles[0];

link.MoveBefore(role, nextLink);

Kilitleri

Değişikliklerinizi kilit tarafından engellenebilir.Kilitleri tek tek öğeleri, bölümler ve mağaza ayarlayabilirsiniz.Bu düzeyleri birini yapmak istediğiniz değişiklik türünü engelleyen bir kilit varsa, onu çalıştığınızda bir özel durum.Kilit öğesi kullanılarak ayarlanıp ayarlanmadığını bulabilir.Tanımlanan bir uzantısı yöntemi olan GetLocks() Immutability.

Daha fazla bilgi için bkz. Salt okunur segmentleri oluşturmak için bir kilitleme ilkesi tanımlama.

Kopyala ve Yapıştır

Öğeleri veya öğe gruplarını kopyalayabilirsiniz bir IDataObject:

Person person = personShape.ModelElement as Person;
Person adopter = adopterShape.ModelElement as Person;
IDataObject data = new DataObject();
personShape.Diagram.ElementOperations
      .Copy(data, person.Children.ToList<ModelElement>());

Öğeleri bir serileştirilmiş öğe grubu olarak depolanır.

Bir IDataObject'i öğelerden bir modele birleştirebilirsiniz:

using (Transaction t = targetDiagram.Store.
        TransactionManager.BeginTransaction("paste"))
{
  adopterShape.Diagram.ElementOperations.Merge(adopter, data);
}

Merge ()ya da alabilen bir PresentationElement veya bir ModelElement.Bunu, bir PresentationElement, üçüncü bir parametre olarak hedef Diyagram üzerinde bir konum belirtebilirsiniz.

Gezinme ve diyagramları güncelleştiriliyor

dsl, kişi veya şarkı gibi bir kavramı temsil eder, etki alanı modeli öğe gösteren Diyagram üzerinde bkz: Şekil öğesi farklıdır.Etki alanı modeli öğe ilişkileri kavramı ve önemli özelliklerini saklar.Şekli öğenin boyutunu, konumunu ve Diyagramı'nda nesnenin görünümü rengi ve bileşen parçalarının düzenini saklar.

Cc512845.collapse_all(tr-tr,VS.110).gifSunu öğeleri

Sınıf diyagramı temel şekil ve öğe türleri

dsl tanımınızı belirlediğiniz her öğe, aşağıdaki standart sınıflarının birinden türetilmiş bir sınıf oluşturur.

Öğe türü

Temel sınıf

Etki alanı sınıfı

ModelElement

Etki alanı ilişkisi

ElementLink

Şekil

NodeShape

Bağlayıcı

BinaryLinkShape

Diyagram

Diagram

Bir diyagram bir öğe genellikle bir modeli öğesini temsil eder.Genellikle (ama her zaman değil), bir NodeShape bir etki alanı sınıf örneğini temsil eder ve bir BinaryLinkShape etki alanı ilişkisi örneği temsil eder.PresentationViewsSubject İlişki temsil ettiği modeli öğe düğümü veya bağlantı şekli bağlar.

Her düğüm veya bağlantı şekli bir diyagram aittir.İkili bağlantı şeklinde iki düğüm şekilleri bağlanır.

Şekiller iki alt şekilleri olabilir.Bir şekil NestedChildShapes ayarlamak için sınırlayıcı kutunun üst öğesinin sınırlandırılan.Bir şekil RelativeChildShapes liste dışında veya kısmen üst – bir etiket veya bağlantı noktası sınırları dışında görüntülenebilir.Hayır bir diyagram olan RelativeChildShapes ve hiç Parent.

Cc512845.collapse_all(tr-tr,VS.110).gifŞekiller ve öğeleri arasında gezinme

Etki alanı modeli öğeleri ve Şekil öğeleri ilgili olarak PresentationViewsSubject ilişkisi.

// using Microsoft.VisualStudio.Modeling;
// using Microsoft.VisualStudio.Modeling.Diagrams;
// using System.Linq;
Person henry = ...;
PersonShape henryShape = 
  PresentationViewsSubject.GetPresentation(henry)
    .FirstOrDefault() as PersonShape;

Aynı İlişki Diyagramı'nda bağlayıcılar ilişkileri bağlar:

Descendants link = Descendants.GetLink(henry, edward);
DescendantConnector dc =
   PresentationViewsSubject.GetPresentation(link)
     .FirstOrDefault() as DescendantConnector;
// dc.FromShape == henryShape && dc.ToShape == edwardShape

Bu ilişki modelinin kök diyagrama da bağlar:

FamilyTreeDiagram diagram = 
   PresentationViewsSubject.GetPresentation(familyTree)
      .FirstOrDefault() as FamilyTreeDiagram;

Şekil tarafından temsil edilen modeli öğesini almak için aşağıdaki komutu kullanın:

henryShape.ModelElement as Person

diagram.ModelElement as FamilyTreeModel

Cc512845.collapse_all(tr-tr,VS.110).gifDiyagram dolaşma

Genel olarak şekilleri ve bağlayıcıları Diyagramı'nda arasında gezinmek için tavsiye değil.İlişkilerini, yalnızca Diyagramı görünümü üzerinde çalışmak gerekli olduğunda şekilleri ve bağlayıcıları arasında taşıma modeli, giderek daha iyidir.Bu yöntemler bağlayıcılar şekilleri her iki ucunda bağlayın:

personShape.FromRoleLinkShapes, personShape.ToRoleLinkShapes

connector.FromShape, connector.ToShape

Birçok Şekil bileşikler şunlardır; Bunlar üst şekil ve bir veya daha fazla alt katmanlarından oluşur.Başka bir şekle göre konumlandırılmış şekiller olarak Kısacası kendi Çocuklar.Üst şekil taşındığında, çocukların birlikte taşınır.

Göreli çocuklar üst şeklinin sınırlayıcı kutunun dışında görünebilir.İç içe alt üst sınırları içinde kesinlikle görünür.

Şekiller bir Diyagram üzerinde üst kümesi elde etmek için aşağıdaki komutu kullanın:

Diagram.NestedChildShapes

Şekilleri ve bağlayıcıları ata sınıfları şunlardır:

ModelElement

-- PresentationElement

-- ShapeElement

----- NodeShape

------- Diagram

------- YourShape

----- LinkShape

------- BinaryLinkShape

--------- YourConnector

Cc512845.collapse_all(tr-tr,VS.110).gifÖzelliklerinin şekilleri ve bağlayıcıları

Çoğu durumda, şekillere açık değişiklik yapmak gerekli değildir.Modeli öğeler değiştiğinde, "Düzelt" kuralları şekilleri ve bağlayıcıları güncelleştirin.Daha fazla bilgi için bkz. Yanıtlama ve değişiklikleri yayılıyor.

Ancak, şekilleri modeli öğeleri bağımsız özellikleri açık bazı değişiklikler yapmak yararlıdır.Örneğin, bu özellikleri değiştirebilir:

  • Size-şeklin genişliği ve yüksekliği belirler.

  • Location-üst Şekil veya diyagram göreceli konuma

  • StyleSet-kalemler ve Şekil veya bağlayıcı çizme için kullanılan fırçaları kümesini

  • Hide-Şekil görünmez hale getirir

  • Show-Şekil sonra görünür hale getirir birHide()

Cc512845.collapse_all(tr-tr,VS.110).gifBir öğe ve onun Şekil oluşturma

Bir öğe oluşturun ve ilişkilerin katıştırma ağacına bağlanma şeklinde otomatik olarak oluşturulan ve onunla ilişkili.Bu işlemin sonunda Yürüt "düzeltme" kuralları tarafından yapılır.Ancak, Şekil otomatik olarak atanan bir konumda görünür ve şeklini, rengini ve diğer özellikleri varsayılan değerleri olacaktır.Şekli nasıl oluşturulduğunu kontrol etmek için birleştirme işlevini kullanabilirsiniz.Önce bir ElementGroup eklemek istediğiniz öğeleri ekleyin ve sonra grup diyagramı ile birleştirmek gerekir.

Bu yöntem:

  • Bir özellik olarak öğe adı atadıysanız, adını ayarlar.

  • Herhangi bir öğenin birleştirme dsl tanımında belirtilen yönergeleri gözlemliyorsa.

Diyagram kullanıcı tıklattığında bu örnek fare konumda bir şekil oluşturur.Bu örnek için dsl tanımında FillColor özelliðinin ExampleShape sergilenen.

  using Microsoft.VisualStudio.Modeling;
  using Microsoft.VisualStudio.Modeling.Diagrams;
  partial class MyDiagram
  {
    public override void OnDoubleClick(DiagramPointEventArgs e)
    {
      base.OnDoubleClick(e);

      using (Transaction t = this.Store.TransactionManager
          .BeginTransaction("double click"))
      {
        ExampleElement element = new ExampleElement(this.Store);
        ElementGroup group = new ElementGroup(element);
         
        { // To use a shape of a default size and color, omit this block.
          ExampleShape shape = new ExampleShape(this.Partition);
          shape.ModelElement = element;
          shape.AbsoluteBounds = new RectangleD(0, 0, 1.5, 1.0);
          shape.FillColor = System.Drawing.Color.Azure;
          group.Add(shape);
        }

        this.ElementOperations.MergeElementGroupPrototype(
          this,
          group.CreatePrototype(),
          PointD.ToPointF(e.MousePosition));
        t.Commit();
      }
    }
  }

Birden fazla şekli sağlarsanız, ilgili konumlarını kullanarak ayarlamak AbsoluteBounds.

Ayrıca, renk ve diğer özellik uçlarının bu yöntemi kullanarak da ayarlayabilirsiniz.

Cc512845.collapse_all(tr-tr,VS.110).gifHareketleri kullanma

Şekilleri ve bağlayıcıları diyagramları alt türlerinden biri olan ModelElement ve canlı deposunda.Bu nedenle değişiklikleri için yalnızca bir işlem içinde yapmanız gerekir.Daha fazla bilgi için bkz. Nasıl yapılır: modeli güncelleştirmek için hareketleri kullanın..

Belge görünümü ve belge veri

Sınıf diyagramı standart Diyagram türleri

Depo bölümleri

Bir modeli yüklendiğinde, beraberindeki Diyagram aynı zamanda yüklenir.Genellikle, modeli Store.DefaultPartition yüklenir ve Diyagram içeriği başka bir bölüme yüklenir.Genellikle, her bölümünün içerik yüklenir ve ayrı bir dosyaya kaydedilir.

Ayrıca bkz.

Başvuru

ModelElement

Kavramlar

Bir etki alanına özgü dil doğrulama

Nasıl yapılır: modeli güncelleştirmek için hareketleri kullanın.

Modelleri Visual Studio Modelbus kullanarak tümleştirme

Diğer Kaynaklar

Bir etki alanına özgü dil kodu oluşturma

Yanıtlama ve değişiklikleri yayılıyor