Devexpress xaf 多对多关系oid键名称更改

Devexpress xaf many to many relationship oid key Name Change

我想设置多对多关系oid键名。 在多对多关系中,Oid 是自动创建的,但在数据库端,我想将 oid 名称更改为自定义名称。 例如;

如果我尝试创建 Person 和 Task 多对多关系。下面的第三个 table 属性;

KomutTanim(FK 到 Makine) Makine(FK 到 KomutTanim) OID(PK,guid)**(我要设置这个键名??)**

告诉我我该怎么做。我在下面添加了示例代码

    [Association("Relation.KomutListesi_Makine",typeof(KomutTanim),UseAssociationNameAsIntermediateTableName = true),XafDisplayName("Makine Komutları")]
public XPCollection<KomutTanim> Komutlar
{
get
{
return GetCollection<KomutTanim>(nameof(Komutlar));
}
}

[Association("Relation.KomutListesi_Makine", typeof(Makine), UseAssociationNameAsIntermediateTableName = true), XafDisplayName("Makineler")]
public XPCollection<Makine> MasterId
{
get
{
return GetCollection<Makine>(nameof(MasterId));
}
}

您可以自定义 XPO 元数据或为中间 table 手动创建持久性 class。 How to implement a many-to-many relationship with an intermediate table 票证中说明了这些方法。

自定义 XPO 元数据的解决方案使用 XAF API 通过 XPDictionary 属性 访问 XPClassInfo 实例。您可以仅使用 XPO 方法访问 XPDictionary,如 How to get an XPClassInfo instance. Also, you can manually create a ReflectionDictionary instance (ReflectionDictionary is an XPDictionary descendant) as described in the How to create persistent metadata on the fly and load data from an arbitrary table 文章中所示。

XPDictionary dictionary = new ReflectionDictionary();
XPClassInfo intermediateClassInfo = dictionary.GetClassInfo(typeof(KomutTanim)).FindMember(nameof(KomutTanim.MasterId)).IntermediateClass;
intermediateClassInfo.FindMember("Oid").AddAttribute(new PersistentAttribute("MyName"));

string conn = "My connection string";

IDataStore store = XpoDefault.GetConnectionProvider(conn, AutoCreateOption.SchemaAlreadyExists);

IDataLayer dl = new SimpleDataLayer(dictionary, store);

XpoDefault.DataLayer = dl;