• 请不要在回答技术问题时复制粘贴 AI 生成的内容
PendingOni
V2EX  ›  程序员

自己写了一段 snippet,可以获取 EF Core 中的实体在控制器内的引用

  •  
  •   PendingOni ·
    Komi-Thaw · Oct 11, 2022 · 1360 views
    This topic created in 1337 days ago, the information mentioned may be changed or developed.
        [Route("api/[controller]")]
        public class loopdisc : Controller
        {
            private readonly IActionDescriptorCollectionProvider _provider;
    
            public loopdisc(IActionDescriptorCollectionProvider provider)
            {
                _provider = provider;
            }
    
            [HttpPost("mainstart")]
            public Task<IActionResult> getresult()
            {
                var dataDic = typeof(BaseContext).GetProperties(BindingFlags.Public | BindingFlags.Instance);
                var names = new List<string>();
                names.AddRange(dataDic.Where(x => x.PropertyType.GenericTypeArguments.Any())
                    .Select(x => x.PropertyType.GenericTypeArguments.First().Name));
    
                var ls = _provider.ActionDescriptors.Items.Select(e => e is ControllerActionDescriptor mau
                        ? (
                            mau.ControllerTypeInfo.DeclaredMethods
                                .First(x => x.Name.Equals(mau.ActionName)).GetMethodBody()
                                ?.LocalVariables.Select(jim =>
                                    jim.LocalType.GenericTypeArguments.Any() &&
                                    names.Contains(jim.LocalType.GenericTypeArguments[0].Name)
                                        ? jim.LocalType.GenericTypeArguments[0].Name
                                        : string.Empty
                                )
                            ,
                            $"{mau.ControllerName}/{mau.ActionName}".ToLowerInvariant())
                        : default)
                    .ToList();
    
                var copy = ls.Where(x => x.Item1.Any(min => !string.IsNullOrEmpty(min)))
                    .Select(x => new { sets = x.Item1.ToHashSet(), router = x.Item2 });
    
                return Task.FromResult<IActionResult>(Ok(copy));
            }
        }
    

    gist 地址 -> https://gist.github.com/KomiSans/7cbcb6c3bf885a08002313e9ff1fee22

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1194 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 17:48 · PVG 01:48 · LAX 10:48 · JFK 13:48
    ♥ Do have faith in what you're doing.