我刚刚开始将我的MVC5项目与EF6x一起移植到MVC Core和EF Core,但我的实体配置存在很大问题.如何将EF6 Fluent配置迁移到EF核心?
如果可能的话,我需要带样本的指南.
这是我的一个映射类和我的尝试
EntityMappingConfiguratuin
public interface IEntityMappingConfiguration
{
void Map(ModelBuilder b);
}
public interface IEntityMappingConfiguration<T> : EntityMappingConfiguration where T : class
{
void Map(EntityTypeBuilder<T> builder);
}
public abstract class EntityMappingConfiguration<T> : EntityMappingConfiguration<T> where T : class
{
public abstract void Map(EntityTypeBuilder<T> b);
public void Map(ModelBuilder b)
{
Map(b.Entity<T>());
}
}
public static class ModelBuilderExtenions
{
private static IEnumerable<Type> GetMappingTypes(this Assembly assembly, Type mappingInterface)
{
return assembly.GetTypes().Where(x => !x.IsAbstract && x.GetInterfaces().Any(y => y.GetTypeInfo().IsGenericType && y.GetGenericTypeDefinition() == mappingInterface));
} …
Run Code Online (Sandbox Code Playgroud) 有一个方案来执行存储过程并读取EF Core中的返回值,返回单个值.
我尝试使用此代码,但这不起作用.我理解这ExecuteSqlCommand
对select不起作用,只能用于更新数据库.
var test = context.Database.ExecuteSqlCommand("SPName");
Run Code Online (Sandbox Code Playgroud)
存储过程只有一个select语句 Select 'somevalue'
寻找任何替代方法来获取存储过程返回的数据.
码:
migrationBuilder.AddPrimaryKey("AspNetRoles", "PK_AspNetRoles", new[] { "Id" }, isClustered: true);
Run Code Online (Sandbox Code Playgroud)
我收到错误消息为 Cannot define PRIMARY KEY constraint on nullable column in table 'AspNetRoles'.
MigrationBuilder的命名空间 - Microsoft.Data.Entity.Relational.Migrations.Builders
如何NOT NULL
在ASP.NET MVC 6中分配上面的代码
我需要在代码中一一应用Entity Framework Core 迁移,我可以调用await dbContext.Database.MigrateAsync();
它,但它将所有待处理的迁移应用到一个块中。
是否有扩展或其他方法可以逐个应用迁移或选择要应用的迁移名称?
我正在尝试向现有表中添加一列。它只是一个字符串列,不涉及任何类型的键,这是我尝试进行的唯一更改。我正在使用 powershell 调用创建迁移
dotnet ef migrations add [migration name] --context [context name]
Run Code Online (Sandbox Code Playgroud)
正如我以前做过很多次一样。我收到一条错误消息。
在类“Program”上调用方法“BuildWebHost”时出错。在没有应用程序服务提供商的情况下继续。错误:无效的列名“[column id]”。
无法创建类型为“DashboardContext”的对象。将“IDesignTimeDbContextFactory<[context name]>”的实现添加到项目中,或参阅https://go.microsoft.com/fwlink/?linkid=851728了解设计时支持的其他模式。
显然这个错误意味着该列不存在,但这正是我试图创建迁移的原因 - 添加它。
编辑:事实证明,添加迁移包括对 Startup->Configure 的调用,在我的情况下它访问了该表。任何有关为什么会这样的信息将不胜感激。同时,我通过在创建迁移时注释该代码来解决它。
我正在将 EF Core 2.0 与 SQLite 一起使用,并且我想在不丢失表列中人类可读的日期时间值的情况下减小数据库的大小。目前,数据上下文将完整的 DateTime CLR 对象存储为像“2018-03-10 16:18:17.1013863”这样的字符串,但在我的情况下,“2018-03-10 16:18:17”就足够了。我必须做什么?
我搜索并搜索过,我相信我知道答案.但我要问,只是为了确保......
我一直在EF Core 2.0模型中创建自有类型,并且到目前为止已经完成了......怪癖.我当前的问题是创建一个索引,该索引包含来自另一个实体内的自有类型的一个或多个属性.
从本质上讲,据我所知,拥有的类型遇到的问题与尝试在导航属性上进行索引相同(而且,BTW,非常棒的作业MS选择异常文本,不会告诉您实际问题......).但是,使用导航属性,您可以使用字符串名称版本并引用shadow属性.我没有运气尝试使用自有类型 - 看起来EF并没有为它们创建"阴影属性".引用实际列名称错误,因为它不是模型上定义的属性名称(并且似乎确认我的"无阴影属性"); 并且nameof
不适用于子对象,并且可能会给出错误的名称.
所以我采用的方法是尽可能多地使用Fluent API创建索引,然后在迁移脚本中直接添加我需要的其他列.虽然它有效,但由于我希望显而易见的原因,这是次优的.
那我错过了什么?我真的想要使用自有类型,但是在迁移时给出了"重命名Vortex",现在我已经接近说"拧它",将它们拉出来,然后手动重新进行,如果没有其他的话理由不是为了避免与我的团队其他成员一起.显然这是一个相对较新的功能,但我很难理解为什么它会在它所处的状态下发布...
我有以下 SQL 表
ID INT
Status NVARCHAR(50)
FileContent XML
Run Code Online (Sandbox Code Playgroud)
使用 EF Core 我想选择ID
和Status
列但不加载 XML 列。(由于 xml 数据可能很大,我不想将其加载到内存中,而且我正在执行的业务逻辑不需要它)
,然后设置Status
public async Task DoSomwthing(int id)
{
// select only needed columns
var result = await _dbContext.MyTable
.Where(x=>x.ID == id)
.Select(x=> new
{
ID = x.ID,
Status = x.Status
})
.SingleOrDefaultAsync();
// do something here using result
// Since i am not loading the complete entity
// How do i set the Status here to new value …
Run Code Online (Sandbox Code Playgroud) 当我运行时 dotnet ef migrations add Initial_Identity
,出现此错误:
在类“Program”上调用方法“BuildWebHost”时出错。在没有应用程序服务提供商的情况下继续。错误:GenericArguments 1 , 'Microsoft.AspNetCore.Identity.IdentityRole', on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]'s 违反了'TRole' 类型的约束。脚手架操作可能会导致数据丢失。请检查迁移的准确性。
我该如何解决?
这是我的代码:
创业班:
public void ConfigureServices(IServiceCollection services)
{
// some codes
services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
}
Run Code Online (Sandbox Code Playgroud)
程序类:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseDefaultServiceProvider(options => options.ValidateScopes = false)
.Build();
}
Run Code Online (Sandbox Code Playgroud)
TemporaryDbContextFactory 类:
public class TemporaryDbContextFactory :
IDesignTimeDbContextFactory<ApplicationDbContext>
{
////////
public ApplicationDbContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
IConfigurationRoot …
Run Code Online (Sandbox Code Playgroud) asp.net entity-framework-core asp.net-core-2.0 ef-core-2.0 entity-framework-migrations