Tag: asp.net core

EFCore Linq然后将两个外键包含在同一个表中

有谁看到我做错了什么? ProjectActivityTasks具有UnitOfMeasureId和ProjectActivityTaskTypeId 。 按照它的编写方式,它认为UnitOfMeasure转到ProjectActivityTaskType 。 在ThenInclude的UnitOfMeasure上ThenInclude了 ProjectActivityTaskType不包含UnitOfMeasure的定义 哪个是对的。 UnitOfMeasure转到ProjectActivityTasks 。 我正在引用此页面但它似乎没有这样工作: https : //docs.microsoft.com/en-us/ef/core/querying/related-data var qry = await _projectActivityRepository.GetAll() .Include(x => x.ProjectActivityVehicles) .ThenInclude(x => x.Vehicle) .Include(x => x.ProjectActivityTasks) .ThenInclude(x => x.ProjectActivityTaskType) .ThenInclude(x => x.UnitOfMeasure) .Where(x => x.Id == Id && x.TenantId == (int)AbpSession.TenantId) .FirstOrDefaultAsync();

entity framework核心仍然采用旧列

我最近从表中删除了一个ConversationId列。 当我开始调试我的服务并尝试保存时,我收到一个错误: 列名称’ConversationId’无效。 码: public class AstootContext : DbContext { public AstootContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { } public DbSet ServiceRequests { get; set; } } 我的实体看起来像这样: public class ServiceRequest { public int Id { get; set; } public int SenderUserId { get; set; } public int PriceTypeId { […]

将.NETFramework 4.5 dll添加到.NETCore项目中

我有一个以前生成的DLL与一些企业代码,我想在.NETCore项目中重用。 但是,由于原始DLL是使用.NETFramework 4.5创建和编译的,因此我无法直接添加dll作为参考。 我创建了一个包含我的dll的nuget包,如下所示。 之后,我可以将这样的包添加到项目中。 但是,我有以下错误: “依赖MyAssembly.dll不支持框架.NETCoreApp,Version = v1.0” 我已经尝试引用.NETCore.Portable.Compatibility但我不认为这是正确的方法。 如何在我的代码中使用此DLL? 这是我添加Nuget包后我的project.json的样子。 { “version”: “1.0.0-*”, “dependencies”: { “MyAssembly.dll”: “1.0.0”, “Microsoft.EntityFrameworkCore”: “1.0.0”, “Microsoft.EntityFrameworkCore.SqlServer”: “1.0.0”, “Microsoft.NETCore.Portable.Compatibility”: “1.0.1”, “NETStandard.Library”: “1.6.0” }, “frameworks”: { “netcoreapp1.0”: { “imports”: [ “dnxcore50”, “portable-net451+win8” ] } } }

访问ASP.NET Core控制器内的连接字符串

我正在使用C#和.NET Framework 4.7开发ASP.NET Core 2.0.2 Web API。 我想从方法的控制器中获取appsettings.json的连接字符串。 我在Startup.cs中做到了: using Microsoft.Extensions.Configuration; public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString(“MyContext”))); […]

如何阻止asp.net阻止对文件的访问,然后在构建时抛出访问被拒绝的错误?

我反复按照以下方式获取构建错误: 无法使以下项目运行:< 项目名称 >(。NETFramework,Version = v4.6.1)原因:访问路径’C:\ < 从根路径 > \ src \ < 项目名称 > \ bin \ Debug \ net641 \ win7-64x \ < some dll,exe,config,whatever >’被拒绝。 我从其他文件夹中得到了类似的错误,但是将它们从源代码控制中删除有帮助(见下文) 有时手动转到资源管理器中的文件夹>右键单击>属性>取消选中“只读”适用于成功构建但是VS或TFS再次锁定文件并返回相同的构建错误 特别是目前有两个.dll文件被添加到bin中,它们被重复设置为“只读”,我必须在重建时手动修复文件浏览器中的文件。 AFAIK这些不在源代码管理中,但是解决方案中同名的另一个项目中的文件已签入并且不会更改。 它可能与我正在使用的asp.net Core RC2这个事实有关,而且我还没有将它与Angular 2 RC1配对,但我不认为这是相关的。 一种理论认为它与TFS有关,因为在我将项目置于源代码控制之前,错误似乎没有开始。 我在Stack Overflow上看过很多类似的问题但是没有答案甚至开始解决我自己的重复问题。 提示:我对转换后的.ts> .js文件进行了相同的处理并将它们从源代码控制中取出似乎有所帮助,但我根本没有看到源代码控制中的bin文件夹(当然它隐藏在解决方案资源管理器中我看不到在源代码管理资源管理器中取消隐藏的选项,所以不确定它是否在那里……)

如何在服务层获取用户

我使用ASP.NET Core 2.1并希望在服务级别获取User 。 我看到HttpContextAccessor被注入某个服务然后我们通过UserManager获取当前User例子 var user = await _userManager.GetUserAsync(accessor.HttpContext.User); 或在控制器中 var user = await _userManager.GetUserAsync(User); 问题: 将HttpContextAccessor注入服务似乎是错误的 – 仅仅因为我们违反了SRP并且服务层没有被隔离(它依赖于http上下文 )。 我们当然可以在控制器中获取用户 (一种更好的方法),但我们面临两难 – 我们根本不想在每个服务方法中将User作为参数传递 我花了几个小时思考如何最好地实现它,并提出了一个解决方案。 我不完全确定我的方法是否足够,并且不违反任何软件设计原则。 共享我的代码希望从StackOverflow社区获得建议。 这个想法如下: 首先,我介绍注册为Singleton的SessionProvider 。 services.AddSingleton(); SessionProvider有一个Session属性,用于保存User , Tenant等。 其次,我介绍SessionMiddleware并注册它 app.UseMiddleware(); 在Invoke方法中,我解析了HttpContext , SessionProvider和UserManager 。 我取了User 然后我初始化ServiceProvider单例的Session属性: sessionProvider.Initialise(user); 在此阶段, ServiceProvider具有包含我们需要的信息的Session对象。 现在我们将SessionProvider注入到任何服务中,并且其Session对象已准备好使用。 码: SessionProvider : public class SessionProvider { public […]

如何unit testingViewComponent.Invoke()?

在ViewComponent对象中, HttpContext和User是只读属性。 如何对这样的组件进行unit testing? 我正在使用MSTest Freamwork。 以下属性用于我的代码中 曲奇饼 会议 用户(System.Security.Principal) public ViewViewComponentResult Invoke() { var vm = new SummaryViewModel(); if (User.Identity is ClaimsIdentity identity && identity.IsAuthenticated) { vm.IsAuthenticated = true; vm.UserName = identity.Claims.FirstOrDefault(c => c.Type == “UserName”).Value; vm.PhotoUrl = identity.Claims.FirstOrDefault(c => c.Type == “FacePicture”).Value; } return View(vm); } [TestMethod] public void UserSummaryVcTest() { var component […]

EF Core 2.0.0查询filter正在缓存TenantId(针对2.0.1+进行了更新)

我正在构建一个多租户应用程序,并且遇到了我认为EF Core在请求中缓存租户ID的困难。 唯一似乎有帮助的是在我登录和退出租户时不断重建应用程序。 我认为它可能与IHttpContextAccessor实例是单例有关,但它不能作为范围,当我在没有重建的情况下登录和退出时,我可以看到租户的名称在页面顶部发生变化,所以它不是问题。 我能想到的另一件事是EF Core正在进行某种查询缓存。 我不确定为什么它会考虑它是一个范围的实例,它应该在每个请求上重建,除非我错了,我可能是。 我希望它的行为类似于作用域实例,因此我可以在模型构建时在每个实例上简单地注入租户ID。 如果有人能指出我正确的方向,我真的很感激。 这是我目前的代码: TenantProvider.cs public sealed class TenantProvider : ITenantProvider { private readonly IHttpContextAccessor _accessor; public TenantProvider( IHttpContextAccessor accessor) { _accessor = accessor; } public int GetId() { return _accessor.HttpContext.User.GetTenantId(); } } …注入TenantEntityConfigurationBase.cs ,我用它来设置全局查询filter。 internal abstract class TenantEntityConfigurationBase : EntityConfigurationBase where TEntity : TenantEntityBase where TKey : IEquatable […]

ASP.NET 5:响应中的Access-Control-Allow-Origin

根据我的理解,当相应地启用CORS时,响应模型应包括以下头信息(假设我想允许所有内容): Access-Control-Allow-Origin: * Access-Control-Allow-Method: * Access-Control-Allow-Header: * 在Startup启用它: public void ConfigureServices(IServiceCollection services) { //… services.AddCors(); services.ConfigureCors(options => { options.AddPolicy(“AllowAll”, p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials()); }); //… } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { //… app.UseCors(“AllowAll”); //… } 问题是这些头文件都没有返回,并且在尝试从API请求时出现以下错误: 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此不允许Origin’http:// localhost ‘访问。

如何从.NET Core库引用Windows.winmd?

我希望从.NET Core库中使用Windows运行时类型,如Frame或Button 。 当我使用传统的PCL(针对Windows / Windows Phone 8.1)时,它似乎工作正常。 但是,出于某种原因,在我将项目切换到DNX之后,它没有编译。 这是我的project.json : { “frameworks”: { // Profile32 == Windows + Windows Phone 8.1 “.NETPortable,Version=v4.6,Profile=Profile32”: { } } } 这是我的示例代码: using System.Linq; using Windows.UI.Xaml.Controls; public class Sample { public void Method() { Enumerable.Empty(); } } 我在此片段中的Frame上遇到编译器错误,说无法找到该类型。 所以,我做了一些关于这方面的侦探工作,并在我的常规PCL上点击了F12,看看它的声明组件。 事实certificate,我想要的大多数Windows运行时类型都存在于一个名为Windows.winmd程序集中,该程序集位于Program Files中。 我很想知道,有什么办法可以从.NET Core库中引用这个程序集吗? 谢谢! (请注意,我不能只使用常规PCL,因为我有特定于.NET Core的需求。) meta:顺便说一下,请不要从这个问题中删除asp.net-core标签,因为这与DNX有关。 编辑:我刚试过这个: “.NETPortable,Version=v4.6,Profile=Profile32”: […]