0

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

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

KomutTanim (FK to Makine) Makine (FK to 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));
}
}
4

1 回答 1

1

您可以自定义 XPO 元数据或为中间表手动创建持久类。这些方法在如何使用中间表票证实现多对多关系中进行了说明。

自定义 XPO 元数据的解决方案使用 XAF API 通过 XPDictionary 属性访问 XPClassInfo 实例。您可以仅使用 XPO 方法访问 XPDictionary,如如何获取 XPClassInfo 实例所示。此外,您可以手动创建 ReflectionDictionary 实例(ReflectionDictionary 是 XPDictionary 的后代),如如何动态创建持久性元数据并从任意表中加载数据一文中所述。

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;

于 2020-10-09T11:32:38.450 回答