【问题标题】:Mapping whole entity via related tables on EF通过 EF 上的相关表映射整个实体
【发布时间】:2015-05-28 19:42:52
【问题描述】:

我有一个具有拥挤实体模型的项目。大多数表是相互关联的(一对多、多对多和多对一)。我需要获取所有相互关联的表名。

通过下面的代码,我可以得到一个类的所有props,并通过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&lt;string, List&lt;string&gt;&gt; 并将键设置为表名,并使用与设置为键的表相关的表名填充List&lt;string&gt;。通过这种方式,我可以拥有所有这些。但是,我无法计划场景。

【问题讨论】:

    标签: c# entity-framework mapping foreign-key-relationship


    【解决方案1】:

    我已经成功了。在这里,它是如何完成的:

    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;
            }
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      相关资源
      最近更新 更多