标签: ef-core-2.0

EF Core 2.0-两端具有所需FK的循环依赖

我有一个由两个实体组成的相当简单的数据模型:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CurrentLocationId { get; set; }

    public List<Location> Locations { get; set; }
    public Location CurrentLocation { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

public class Location
{
    public int Id { get; set; }
    [Required]
    public int UserId { get; set; }
    public string Address { get; set; }

    public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

为了成功运行迁移,我需要以下模型构建器代码:

builder.Entity<Location>()
       .HasOne(x => …
Run Code Online (Sandbox Code Playgroud)

entity-framework circular-dependency ef-core-2.0

6
推荐指数
1
解决办法
1525
查看次数

Microsoft.EntityFrameworkCore.Sqlite.Core和Microsoft.EntityFrameworkCore.Sqlite程序集之间有什么区别?

在使用EFCore加密SQLite数据库时,我遇到了这个GitHub问题

请参阅8月1日bricelam的评论.此问题解释了如何使用efcore加密SQLite数据库.它指的是Microsoft.EntityFrameworkCore.Sqlite.Core.然而,还有另一个软件包"Microsoft.EntityFrameworkCore.Sqlite",它在许多微软文档中被广泛使用和引用.我想知道这两个组件之间的区别,我应该使用哪个组件?

如果我使用Microsoft.EntityFrameworkCore.Sqlite.Core,我会错过任何功能吗?

.net-core asp.net-core ef-core-2.0

6
推荐指数
1
解决办法
1369
查看次数

如何更新 Entity Framework Core 中的 DBContext 类

我在我的项目中使用Entity Framework Core,使用命令创建了一个DbContext类

\n\n
PM> Scaffold-DbContext "Server=servername;Database=DBname;User Id=user;Password=password;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context QuestionnaireEntities -Tables Category_Master,Item,Option_Master,Question_Master,Sub_Category_Master,Sub_Item\n
Run Code Online (Sandbox Code Playgroud)\n\n

它完美地创建了 DBContext 类,但是如果我想从数据库更新我的 DBContext,而不是在 EFcore 中执行此操作,在 EF 中只需右键单击并选择选项更新从数据库即可轻松完成

\n\n

另外,我如何在 DBContext 类中使用存储过程

\n\n

在msdn网站上他们提到了一个命令

\n\n
\n

PM> get-helpscaffold-dbcontext\xe2\x80\x93详细

\n
\n\n

但它没有任何有关更新 DBContext 和在其中添加存储过程的信息

\n\n

我如何在 EF Core 中执行此操作\n我正在使用带有 .Net core 2.0 和 EFcore 2.0 的 VS 2017 社区版

\n

.net-core ef-core-2.0

6
推荐指数
1
解决办法
1万
查看次数

异常调用参数“ 0”的“ Remove”:“词典中不存在给定的键

我已经使用来添加了迁移Add-Migration,现在,如果运行Remove-Migration,它将恢复迁移并成功删除生成的迁移文件,但是在Package Manager控制台中也会显示错误。我不知道它背后的确切原因和副作用。这是EF Core错误吗?

包管理器输出:

PM>移除迁移移除迁移'20180320052521_testMigration'。还原模型快照。做完了 异常调用参数“ 0”的“ Remove”:“词典中不存在给定的键。” 下午>

EF核心版本: 2.0.1

c# entity-framework-core asp.net-core asp.net-core-2.0 ef-core-2.0

6
推荐指数
1
解决办法
595
查看次数

由于InverseProperty模型而导致Asp.net Core 2.1崩溃

在第一次调用DbContext时,System.Reflection中一个非常长的未处理异常导致我的网站在加载时崩溃。

使用ef-core 2.1 rc1

System.ArgumentNullException: Value cannot be null.
Parameter name: type
   at System.Reflection.IntrospectionExtensions.GetTypeInfo(Type type)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.InversePropertyAttributeConvention.ConfigureInverseNavigation(InternalEntityTypeBuilder entityTypeBuilder, MemberInfo navigationMemberInfo, InternalEntityTypeBuilder targetEntityTypeBuilder, InversePropertyAttribute attribute)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.InversePropertyAttributeConvention.Apply(InternalEntityTypeBuilder entityTypeBuilder, PropertyInfo navigationPropertyInfo, Type targetClrType, InversePropertyAttribute attribute)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.NavigationAttributeEntityTypeConvention`1.Apply(InternalEntityTypeBuilder entityTypeBuilder)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnEntityTypeAdded(InternalEntityTypeBuilder entityTypeBuilder)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.RunVisitor.VisitOnEntityTypeAdded(OnEntityTypeAddedNode node)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.OnEntityTypeAddedNode.Accept(ConventionVisitor visitor)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ConventionVisitor.Visit(ConventionNode node)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ConventionVisitor.VisitConventionScope(ConventionScope node)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ConventionBatch.Run()
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ConventionBatch.Dispose()
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationshipDiscoveryConvention.DiscoverRelationships(InternalEntityTypeBuilder entityTypeBuilder)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationshipDiscoveryConvention.Apply(InternalEntityTypeBuilder entityTypeBuilder)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnEntityTypeAdded(InternalEntityTypeBuilder entityTypeBuilder)
   at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.OnEntityTypeAdded(InternalEntityTypeBuilder entityTypeBuilder)
   at Microsoft.EntityFrameworkCore.Metadata.Internal.Model.AddEntityType(EntityType entityType)
   at Microsoft.EntityFrameworkCore.Metadata.Internal.Model.AddEntityType(Type type, ConfigurationSource configurationSource)
   at Microsoft.EntityFrameworkCore.Metadata.Internal.InternalModelBuilder.Entity(TypeIdentity& type, ConfigurationSource configurationSource, …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core asp.net-core-2.0 ef-core-2.0

6
推荐指数
2
解决办法
902
查看次数

查询源已与表达式关联

我有一个多语言实体(翻译后的字符串存储在单独的表中),我想过滤当前 UI 文化的翻译后的字符串。如果当前 UI 文化没有翻译的字符串,我想获取并过滤实体的第一个默认翻译字符串。

我正在使用 .NET Core 2.1、EF Core 2.1 和 ABP Boilerplate 3.6.2 框架。

这是我的代码。此功能是过滤DocumentCategory横跨实体名称的财产DocumentCategoryTranslation相关实体。如果有的话,我采用当前的 UI 文化翻译字符串,否则我采用第一个。返回的对象只是我的结果的包装器。

public async Task<PagedResultDto<GetDocumentCategoryForView>> GetAll(GetAllDocumentCategoriesInput input)
{
    var query = (from dc in _documentCategoryRepository.GetAllIncluding(dc => dc.Translations)
                select new
                {
                    dc,
                    t = dc.Translations.FirstOrDefault(t => t.Language == CultureInfo.CurrentUICulture.Name) ?? dc.Translations.First()
                }).AsQueryable()
                .WhereIf(!string.IsNullOrWhiteSpace(input.Filter), e => false || e.t.Name.ToLower().Contains(input.Filter.ToLower()));

    var result = await query.ToListAsync();

    return new PagedResultDto<GetDocumentCategoryForView>(
        result.Count,
        result.Select(o => new GetDocumentCategoryForView()
        {
          DocumentCategory = ObjectMapper.Map<DocumentCategoryDto>(o.dc)
        }).ToList()
    );
} …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core aspnetboilerplate ef-core-2.0

6
推荐指数
1
解决办法
1982
查看次数

EF Core 2 停止对多对多关系的循环依赖

我在 MySql 服务器上使用来自 MySql 的 Sakila 示例数据库。该图如下所示。 EERDiagram Sakila

重要的表是storeinventoryfilm表。该是多到许多表和关系连接表库存表。

我使用EFCore 2在一个新的 dotnetcore 项目中搭建了这个数据库。我正在尝试获取商店列表及其电影列表。

所述实体定义如下:

店铺

public class Store
{
    public Store()
    {
        Customer = new HashSet<Customer>();
        Inventory = new HashSet<Inventory>();
        Staff = new HashSet<Staff>();
    }

    public byte StoreId { get; set; }
    public byte ManagerStaffId { get; set; }
    public short AddressId { get; set; }
    public DateTimeOffset LastUpdate …
Run Code Online (Sandbox Code Playgroud)

mysql .net-core-2.0 ef-core-2.0

6
推荐指数
1
解决办法
505
查看次数

EF 核心 QueryFilter 的性能问题

在我们的系统中,我们在 EF 核心中使用 QueryFilters 时遇到了性能问题。问题在于 EF 核心过滤器在 LEFT JOIN 内部进行过滤,而不是在其外部进行过滤。

生成的 SQL 看起来像这样:

SELECT [pom].[Id],
        [pom].[DeleteDate],
        [pom].[UpdateDate],
        [pom].[Version],
        [t].[Id],
        [t].[MandatorId],
        [t].[NetPriceAmount],
        [t].[NetPriceCurrencyIso4217Code]
FROM [externaldata].[PurchaseOfferMetadata] AS [pom]
    LEFT JOIN (
    SELECT [po].[Id],
            [po].[MandatorId],
            [po].[NetPriceAmount],
            [po].[NetPriceCurrencyIso4217Code]
    FROM [externaldata].[PurchaseOffer] AS [po]
    WHERE [po].[MandatorId] = 1
) AS [t] ON [pom].[Id] = [t].[Id]
WHERE [pom].[Id] IN 
    (CAST(3094411 AS bigint), 
    CAST(4757070 AS bigint), 
    CAST(4757112 AS bigint), 
    CAST(5571232 AS bigint))
Run Code Online (Sandbox Code Playgroud)

有问题的部分是WHERE [po].[MandatorId] = 1. 如果这是在第二个WHERE语句中,则查询运行得更快。

数据库模型配置如下:

modelBuilder.Entity<PurchaseOffer>()
      .HasQueryFilter(po => po.MandatorId == 1) …
Run Code Online (Sandbox Code Playgroud)

c# sql entity-framework ef-core-2.0 ef-core-2.1

6
推荐指数
1
解决办法
571
查看次数

EFCore FromSql 异步

我想并行执行几个 SELECT 存储过程调用。我设置我的上下文如下:

public virtual DbSet<Task<GetCaseCaseContextModel>> CaseGetCaseContextData { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后我的 repo 类执行以下操作:

public async Task<List<GetCaseNotesContextModel>> GetCaseNotes(string caseId)
{
    var notes = _context.CaseGetCaseContextData.FromSql("x_Fortellis_CaseGetCaseNotes @p0", caseId, caseId).ToListAsync();

    return notes;
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

严重性代码描述项目文件行抑制状态错误CS0029无法隐式转换类型'System.Threading.Tasks.Task<System.Collections.Generic.List<System.Threading.Tasks.Task<CaseManagement.Infrastruct.Database.Repo.Case.GetCase .GetCaseCaseContextModel>>>' 到 'System.Collections.Generic.List<CaseManagement.Infrastruct.Database.Repo.Case.GetCase.GetCaseNotesContextModel>' CaseManagement.Infrastruct.Database C:\Dev\Bitbucket\webscv\Fortellis\CaseManagement\CaseManagement .Infrustruct.Database\Repo\Case\GetCase\GetCaseRepoHelper.cs 72 活动

当我将上下文更改为:

public virtual Task<DbSet<GetCaseCaseContextModel>> CaseGetCaseContextData { get; set; }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

严重性代码说明项目文件行抑制状态错误 CS1061“Task<DbSet>”不包含“FromSql”的定义,并且找不到接受类型“Task<DbSet>”的第一个参数的可访问扩展方法“FromSql”(是您缺少 using 指令或程序集引用吗?) CaseManagement.Infrastruct.Database C:\Dev\Bitbucket\webscv\Fortellis\CaseManagement\CaseManagement.Infrustruct.Database\Repo\Case\GetCase\GetCaseRepoHelper.cs 70 活动

我最终想使用以下方式致电他们:

GetCaseCaseContextModel caseData = new GetCaseCaseContextModel();
List<GetCaseNotesContextModel> notes = new List<GetCaseNotesContextModel>();

Parallel.Invoke(
    async () => caseData = await GetCaseData(caseId, dealerGroupId),
    async () …
Run Code Online (Sandbox Code Playgroud)

entity-framework-core ef-core-2.0 ef-core-2.1

6
推荐指数
1
解决办法
1万
查看次数

验证 30000 没有为小数列指定类型

在不使用属性的情况下指定小数精度的最佳方法是什么。我只需要在我的 Data.Models 中将所有小数设置在一个位置。其繁琐的为每个小数指定属性。

public class Customer
{
    public int customerId{ get; set; }

    [Column(TypeName = "decimal(18,2)")]
    public decimal AvailableAmount{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-core-2.0

6
推荐指数
4
解决办法
3683
查看次数