我想更改标识3.0表的表名 - ASP.NET Core.
到目前为止,使用"ToTable"选项(上面的第2号)更新,我设法破坏了我的锁定文件,结果导致项目损坏.第三种选择已过期.
我创建了一个vanilla项目 - 没有通过带有身份3.0的VS2015创建的更改
然后我尝试了这个:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
builder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
builder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
builder.Entity<IdentityRole>().ToTable("MyRoles");
}
Run Code Online (Sandbox Code Playgroud)
然后,我检查了更新的迁移,以查看表名是否已更改,但他们没有.
我目前正在使用1.0.0-rc1-update2.
你如何更改这些表的名称?
我有一个包含作业的"作业"表.事实上,乔布斯并不总是一气呵成......你可以找到一份有很多访问的工作.我打算将其表示为另一个工作,但通过自引用linkId链接回原始工作.
我无法使用流畅的API表示这一点.它是一对多关系..一个工作可能有很多访问,因此一些linkId指向原始工作.链接ID将返回到原始作业ID.它也是可选的,因为大多数工作可能一次性完成..
我已经找到了这个但很难将其他例子转换为这个例子,因为很多它们是一对一的,而且那些给出一对多例子的例子似乎是使用不同的EF6.
我的工作表是:
using System;
namespace JobsLedger.Model.Entities
{
public class Job : IEntityBase
{
public int Id { get; set; }
public string Model { get; set; }
public string Serial { get; set; }
public string ProblemDetails { get; set; }
public string SolutionDetails { get; set; }
public DateTime JobDate { get; set; }
public int BrandId { get; set; }
public int JobTypeId { get; set; }
public int StatusId { get; set; } …Run Code Online (Sandbox Code Playgroud) c# entity-framework self-reference entity-framework-core ef-fluent-api
我正在努力解决从长期裁员中恢复过来的问题。
我问了一个关于在我的通用基础存储库中配置 DBContext的问题。只有在用户登录后,我才能构造连接字符串,因此我无法在 startup.cs 中注册服务 - 我必须使用构造函数参数来实例化我的 DBContext。
我得到了这个我认为可以解决问题的答案,但是我在以下工厂类中遇到错误:
public class ContextFactory<T> : IContextFactory<T> : where T : DbContext
{
public T CreateDbContext(string connectionString)
{
var optionsBuilder = new DbContextOptionsBuilder<T>();
optionsBuilder.UseSqlServer(connectionString);
return new T(optionsBuilder.Options);
}
}
Run Code Online (Sandbox Code Playgroud)
错误在行返回new T(optionsBuilder.Options);并且是:
无法创建变量类型“T”的实例,因为它没有 new() 约束
我在 Powershell 中运行以下命令来创建初始迁移:
dotnet ef migrations add INITIAL --context CATALOGDbContext -s ../Jobsledger.API
Run Code Online (Sandbox Code Playgroud)
虽然它有效(我能够创建迁移和数据库),但它提供以下警告:
EF Core 工具版本“2.2.4-servicing-10062”早于运行时“3.0.0”。更新工具以获取最新功能和错误修复。
我认为这会导致结果出现问题,因为我的表现在缺少第一条记录中的 id。它的字面意思是空白。我不知道这如何在 2.2.4 中完美运行,但现在升级到 3.0.0,它创建了第一个带有空白 id 字段的记录......
我访问了站点“ Entity Framework Core 工具参考 - Visual Studio 中的包管理器控制台”,其中完成了升级工具的步骤。
虽然我已将所有内容都设置为 3.0.0,但即使我在此页面上尝试了他们的建议,我仍然收到上述错误。我确实更新了 .csproj 文件,我什至尝试了包管理器控制台选项,但仍然出现错误。
我使用的是完全升级到版本 16.4.0 Preview 1 的 Visual Studio 19。
如何让此警告消失,即如何更新 EF 工具?
更新 所以我从头开始重建我的项目,以确保我再次添加了所有包并且仍然得到相同的结果。
我还删除了 nuget 目录中的所有内容,并让它再次重新加载所有包,但仍然得到相同的结果。
这个项目由三个项目web项目和两个数据库类库组成。
这是我用于 Web 项目的 csproj 文件。
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
<TypeScriptToolsVersion>3.6</TypeScriptToolsVersion>
<TypeScriptBuildMode>true</TypeScriptBuildMode>
</PropertyGroup>
<ItemGroup>
<Compile Remove="ControllerServices\Catalog\UserServices\UserValidateService.cs" />
<Compile Remove="Controllers\SampleDataController.cs" />
<Compile Remove="Controllers\SelectDataController.cs" />
</ItemGroup>
<ItemGroup>
<Content Remove="wwwroot\favicon.ico" /> …Run Code Online (Sandbox Code Playgroud) 在这种情况下,我无法关注wiki.我想使用Automapper 5.2.我找不到一个结尾示例的简单结尾,它显示了具有上下文的可靠配置.根据上下文,我的意思是你在哪里放置配置文件,以及静态和实例api之间的区别?
我查看了DNRTV下载,但它处理的是1.0版本.
你如何设置这个包?我有一个名为Client的模型,如下所示.
public class Client : IEntityBase
{
public Client()
{
Jobs = new List<Job>();
}
public int Id { get; set; }
public int ClientNo { get; set; }
public bool Company { get; set; }
public string CompanyName { get; set; }
public string ClientFirstName { get; set; }
public DateTime DeActivated { get; set; }
public bool Activity { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateUpdated { get; set; …Run Code Online (Sandbox Code Playgroud) 我有eventAggregator工作在我的项目的所有其他部分.我有两个根,我使用eventAggregator将消息发布到消息div,它的工作原理.
在我的公共根目录中,我有"public.ts",它有我的路由配置.在那里,我有一个PostRenderStep,我在其中发布消息..好吧,我发布一条空消息,强制消息消失.
这是我的PostRenderStep类:
class PostRenderStep {
constructor(private eventAggregator: EventAggregator) { }
run(navigationInstruction: NavigationInstruction, next: Next): Promise<any> {
console.log("I'm inside the POST activate step!")
return Promise.resolve()
.then(() => this.eventAggregator.publish('messages', new MessagePayload("", "", "")))
.then(result => next());
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到两个错误 - 第一个是事件聚合器:
aurelia-logging-console.js:47 ERROR [app-router] TypeError: Cannot read property 'publish' of undefined
at public.ts:87
at <anonymous>
Run Code Online (Sandbox Code Playgroud)
并且在此错误之后是:
ERROR [app-router] Router navigation failed, and no previous location or fallbackRoute could be restored.
Run Code Online (Sandbox Code Playgroud)
我怀疑带有导航的postRenderStep由于eventAggregator行而失败并导致第二个错误.
我对此进行了调查,以确定它是否是我的事件聚合器,它不是在公共根目录中工作但事实上我在更改了根目录后发布了一条消息,这显示它的工作情况.我还放了一个按钮,当点击它的时候有一个发布,它也起作用表明它的工作 - 只是不在这个类.
有人可以更详细地解释这个错误在说什么,以及为什么会发生这种错误以及如何解决它...
它完全适用于我的另一个根本,而不是在这个根本.
完整的public.ts文件
import { Aurelia, PLATFORM, …Run Code Online (Sandbox Code Playgroud) 我正在使用 Aurelia 前端 - SPA 运行 asp.net core 2.2。
我已经在核心 3.0 中运行了这个,但是我不得不降额运行 OData(他们还没有把它放到那个版本中)。
我打开了一个 CMD 并输入npm run webpack:watch并失败了,所以我在 SO 中查找了错误的第一行并得到了这个,但这不是语法问题 - 我有正确的语法。
(webpack 已安装,版本为 4.38.0)
详细错误:
TypeError: CleanWebpackPlugin is not a constructor
at module.exports (C:\AURELIA\5 - ODATA\OLD\JobsLedger.API\webpack.config.js:73:4)
at handleFunction (C:\AURELIA\5 - ODATA\OLD\JobsLedger.API\node_modules\webpack-cli\bin\utils\prepareOptions.js:21:13)
at prepareOptions (C:\AURELIA\5 - ODATA\OLD\JobsLedger.API\node_modules\webpack-cli\bin\utils\prepareOptions.js:9:5)
at requireConfig (C:\AURELIA\5 - ODATA\OLD\JobsLedger.API\node_modules\webpack-cli\bin\utils\convert-argv.js:119:14)
at C:\AURELIA\5 - ODATA\OLD\JobsLedger.API\node_modules\webpack-cli\bin\utils\convert-argv.js:125:17
at Array.forEach (<anonymous>)
at module.exports (C:\AURELIA\5 - ODATA\OLD\JobsLedger.API\node_modules\webpack-cli\bin\utils\convert-argv.js:123:15)
at C:\AURELIA\5 - ODATA\OLD\JobsLedger.API\node_modules\webpack-cli\bin\cli.js:71:45
at Object.parse (C:\AURELIA\5 - ODATA\OLD\JobsLedger.API\node_modules\webpack-cli\node_modules\yargs\yargs.js:567:18)
at C:\AURELIA\5 - …Run Code Online (Sandbox Code Playgroud) 根据 Pashov 的博客文章,我有以下静态方法用于在过滤器选项之间进行选择。
public static class ExpressionRetriever
{
private static MethodInfo containsMethod = typeof(string).GetMethod("Contains");
private static MethodInfo startsWithMethod = typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) });
private static MethodInfo endsWithMethod = typeof(string).GetMethod("EndsWith", new Type[] { typeof(string) });
public static Expression GetExpression<T>(ParameterExpression param, ExpressionFilter filter)
{
MemberExpression member = Expression.Property(param, filter.PropertyName);
ConstantExpression constant = Expression.Constant(filter.Value);
switch (filter.Comparison)
{
case Comparison.Equal:
return Expression.Equal(member, constant);
case Comparison.GreaterThan:
return Expression.GreaterThan(member, constant);
case Comparison.GreaterThanOrEqual:
return Expression.GreaterThanOrEqual(member, constant);
case Comparison.LessThan:
return Expression.LessThan(member, constant);
case Comparison.LessThanOrEqual:
return Expression.LessThanOrEqual(member, …Run Code Online (Sandbox Code Playgroud) 更新到 Dotnet Core 3.1 并移植我的代码,我发现在 DbContext 中出现以下错误:
“PropertyBuilder”不包含“HasDefaultValue”的定义,并且找不到接受“PropertyBuilder”类型的第一个参数的可访问扩展方法“HasDefaultValue”(您是否缺少 using 指令或程序集引用?)
我发生这种情况的代码如下:
modelBuilder.Entity<Tenant>().Property(t => t.TenantNo).HasMaxLength(20);
modelBuilder.Entity<Tenant>().Property(t => t.CompanyName).HasMaxLength(100).IsRequired();
modelBuilder.Entity<Tenant>().Property(t => t.ContactLastName).HasDefaultValue(false).IsRequired();
modelBuilder.Entity<Tenant>().Property(t => t.Email).HasMaxLength(500).IsRequired();
modelBuilder.Entity<Tenant>().Property(t => t.MobilePhone).HasMaxLength(20).IsRequired();
modelBuilder.Entity<Tenant>().Property(t => t.OfficePhone).HasMaxLength(20);
modelBuilder.Entity<Tenant>().Property(t => t.CompanyEmail).HasMaxLength(500);
modelBuilder.Entity<Tenant>().Property(t => t.Address1).HasMaxLength(500);
modelBuilder.Entity<Tenant>().Property(t => t.Address2).HasMaxLength(500);
modelBuilder.Entity<Tenant>().Property(t => t.ABN).HasMaxLength(14);
modelBuilder.Entity<Tenant>().Property(t => t.Database).HasMaxLength(100).IsRequired();
modelBuilder.Entity<Tenant>().Property(t => t.IsLocked).HasDefaultValue(false);
Run Code Online (Sandbox Code Playgroud)
我在哪里使用过 .HasDefaultValue 我收到这个错误。我相信,我拥有所有必需的指令......
using JobsLedger.CATALOG.Entities;
using Microsoft.EntityFrameworkCore;
using System.Threading;
using System.Threading.Tasks;
Run Code Online (Sandbox Code Playgroud)
似乎在从 3.0 升级到 3.1 时,他们错过了这一点,或者他们正在使用不同的方式设置默认值。
所以在我发布这个之前,我确实做了一个谷歌搜索和一个 Stackoverflow 搜索,但没有结果。
想知道有人可能会建议如何在 3.1 中设置默认值?
c# ×5
asp.net-core ×4
.net-core ×2
aurelia ×2
automapper ×1
automapper-5 ×1
generics ×1
reflection ×1
webpack ×1