[英]Mapping whole entity via related tables on EF
我有一個包含擁擠的實體模型的項目。 大多數表相互關聯(一對多,多對多和多對一)。 我需要獲取彼此相關的所有表名。
使用下面的代碼,我可以獲得類的所有道具,並通過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;
}
此方法將帶回與“提示”相關的所有表。 除了對所有表格手動執行此操作之外,如何才能找到所有相關表格?
假設我創建了一個新的Dictionary<string, List<string>>
並將鍵設置為表名,並使用與設置為鍵的表相關的表名填充List<string>
。 這樣我就可以全部拿下。 但是,我無法計划該方案。
我管理好了 在這里,如何完成:
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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.