我正在关注用户定义列的IdeaBlade教学单元,我创建了以下方法:
public static IEnumerable<DataColumn> GetUnknownColumns(PersistenceManager pManager, Type pType)
{
PropertyDescriptorList.Reset(pType);
var definedDescriptors = PropertyDescriptorList.Get(pType);
pManager.Clear();
pManager.InitializeSchema(pType);
EntityTable uddTable = pManager.GetTable(pType);
foreach (DataColumn col in uddTable.Columns)
{
PropertyDescriptor prop = definedDescriptors.Find(col.ColumnName);
if (prop == null)
yield return col;
}
}
注意:pType
被假定为IdeaBlade.Persistence.Entity
。
这段代码效果很好,除非我对pType
在运行时指向的实体/表进行更改,否则此代码将不会获取新列。此外,如果我删除列,它仍会显示在uddTable.Columns
中。我做错了什么?
修改
修正了一个拼写错误(经理 - > pManager)。
我也想出了这个问题,我正在修改表格pType指向sql,而不是通过PM,我相信这是导致问题的原因。我通过在InitializeSchema调用之前添加EntityTypeInfo.GetPrototypeTable(pType).IsSchemaInitialized = false;
来修复它