我有一个拥挤的实体模型的项目。大多数表彼此相关(一对多,多对多,多对一)。我需要让所有表名相互关联。
使用下面的代码,我可以获取类的所有道具并通过Split方法消除类型以获取与该类相关的其他表。
List<string> tabloIsimleri = new List<string>();
public object GetTableList()
{
var List = dbContext.Takips.ToList();
foreach (var item in List)
{
foreach (_PropertyInfo p in typeof(Takips).GetProperties())
{
var propName = p.PropertyType.FullName;
if (propName.Contains("ProjectName.DataService"))
{
string[] test = p.Name.Split(' ');
int a = test.Count();
var son = test[a - 1];
if (!tabloIsimleri.Contains(son))
{
tabloIsimleri.Add(son);
}
}
}
}
return tabloIsimleri;
}
此方法返回与“Takips”相关的所有表格。除了为所有表格手动执行此操作外,如何才能到达所有相关表格?
假设我创建了一个新的Dictionary<string, List<string>>
并将密钥设置为表名,并使用与设置为密钥的表相关的表名填充List<string>
。通过这种方式,我可以掌握所有这些。但是,我无法计划这种情况。
答案 0 :(得分:0)
我已经成功了。在这里,它是如何完成的:
public class ReportService
{
EntityName dbContext = new EntityName();
List<string> tabloIsimleri = new List<string>();
List<string> tabloListesi = new List<string>();
List<string> iliskiliOlanlar = new List<string>();
Dictionary<string, List<string>> agacGosterim = new Dictionary<string, List<string>>();
public void Test()
{
try
{
tabloListesi = Tablolar();
string tutmac;
foreach (var t in tabloListesi)
{
tutmac = string.Format("ProjectName.DataService.{0}", t);
var tip = Type.GetType(tutmac, true);
foreach (_PropertyInfo p in tip.GetProperties())
{
var propName = p.PropertyType.FullName;
if (propName.Contains("ProjectName.DataService"))
{
string[] test = p.Name.Split(' ');
int a = test.Count();
var son = test[a - 1];
if (!iliskiliOlanlar.Contains(son))
{
iliskiliOlanlar.Add(son);
}
}
}
agacGosterim.Add(t, iliskiliOlanlar);
iliskiliOlanlar = new List<string>();
}
}
catch (Exception)
{
}
}
public List<string> Tablolar()
{
using (var context = new EntityName())
{
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
var storageMetadata = ((EntityConnection)objectContext.Connection).GetMetadataWorkspace().GetItems(DataSpace.SSpace);
var entityProps = (from s in storageMetadata where s.BuiltInTypeKind == BuiltInTypeKind.EntityType select s as EntityType);
foreach (var item in entityProps)
{
string[] ayir = item.FullName.Split('.');
int a = ayir.Count() - 1;
if (!tabloIsimleri.Contains(ayir[a]))
{
tabloIsimleri.Add(ayir[a]);
}
}
return tabloIsimleri;
}
}
}