Tag: entity framework

使用LINQ处理大型SQL查询

我试图通过实体数据模型从MS SQL数据库中的表中获取大约2000万条目的每条记录。 我最初的想法是以块的forms检索数据,如下所示: public IEnumerable<IEnumerable> GetDevicesInChunks(int chunkSize) { using (var db = new AccountsEntities()) { for (int i = 0; i < db.devices.Count(); i += chunkSize) { yield return db.devices.Skip(i).Take(chunkSize); } } } 但是,看来我必须在调用Skip之前调用OrderBy ,从我使用上述方法时抛出的exception来判断 The method ‘Skip’ is only supported for sorted input in LINQ to Entities. The method ‘OrderBy’ must be called before […]

entity framework4和同义词

如果在数据库A中存在名为“MyTable”的表,该表实际上来自指向另一个数据库(B)的同义词,我是否可以将该表创建为表示数据库A的entity framework模型中的实体,因为它实际上存在在另一个数据库? 我很好奇,如果EF 4的情况有所改善,那么: http : //social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/fff1067a-650d-4b47-a4e8-79eedebe5c11/ 谢谢。

使用Entity Framework在数据库中搜索文本

我正在编写一个UI,允许某人通过他们的名字和/或姓名查找用户。 例如,如果您输入“Mike”作为名字,输入“Jo”作为姓氏,则会返回“Mike Jones”,“Mike Johnson”和“Mike Jobs”。 我在此搜索中使用以下LINQ语句: var users = (from u in context.TPM_USER where u.LASTNAME.ToLower().Contains(LastName.ToLower()) && u.FIRSTNAME.ToLower().Contains(FirstName.ToLower()) select u); (可能有或没有更好的方法来做一个不区分大小写的类似条款,但这似乎有效) 问题是如果用户输入名字或姓氏,但是将另一个字段留空。 如果我输入“Mike”作为名字并将“姓氏”字段留空,我想要返回所有Mikes而不管他们的姓氏。 除非两个字段至少填充了某些字段,否则上述查询不会返回任何结果。 我试过了: var users = (from u in context.TPM_USER where (LastName == “” || u.LASTNAME.ToLower().Contains(LastName.ToLower())) && (FirstName == “” || u.FIRSTNAME.ToLower().Contains(FirstName.ToLower())) select u); 但是,除非两个字段都填写完毕,否则我仍然没有结果。 我在调试器下validation了LastName == “”确实是真的。 更新: 我做了一些调试,这实际上是一个Oracle问题。 生成的查询是: –Replaced the field […]

Automapper项目使用

我目前正在后端使用automapper将对象映射到模型。 我最近决定使用以下代码来处理所有时区转换: cfg.CreateMap() .ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours)); cfg.CreateMap() .ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours).Value); Object.ProjectTo().SingleOrDefault(); 然后它工作正常,对象被映射和时区转换 但是当我在业务层中使用以下代码来执行单个对象映射时: Mapper.Map(singleRecord); 它给出了一个错误:只能从LINQ to Entities调用此函数。 堆栈跟踪 : at System.Data.Entity.DbFunctions.AddHours(Nullable`1 timeValue, Nullable`1 addValue) at lambda_method(Closure , DateTime , DateTime , ResolutionContext ) at AutoMapper.ResolutionContext.Map[TSource,TDestination](TSource source, TDestination destination) at lambda_method(Closure , Inventory , InventoryModel , ResolutionContext ) Mapper.Map在特定场景中很重要,我也不想投影单个记录。 这有什么方法吗?

在命令行而不是VisualStudio中从我的EDMX生成C#实体文件

我有一个.edmx文件,当我在VisualStudio中打开它时会生成C#实体文件并点击“保存”操作。 如何从命令行执行此操作? 我想在尝试编译之前设置一个可以执行此操作的CI环境…

使用默认约定的可选从属端的一对一关系

我希望使用Entity Framework代码优先模型中的默认约定来映射具有可选依赖实体( Car )的主体实体( Person )。 此答案中描述了一种解决方案,它使用modelBuilder上的流畅API映射到密钥。 是否可以仅使用默认的EF约定来执行此操作? 以下代码将抛出一个Unable来确定Person和Car类型之间关联的主要结尾。 无效的操作exception。 public DatabaseContext : DbContext public DbSet Persons { get; set; } public DbSet Cars { get; set; } // No OnModelCreating – possible? public class Person public Int32 PersonId { get; set; } public Int32? CarId { get; set; } // Optional. public virtual Car […]

entity framework:在EF(C#代码)中查看视图会返回重复的结果

我正在使用EF来查询数据库视图。 查询可以返回正确的记录数, 但所有记录都是相同的。 但是,当我在sql SSMS中运行原始查询时,一切都很好。 有人可以提供一些关于可能的根本原因的线索吗? 视图定义如下: CREATE VIEW [dbo].[v_JobAEWeekly] AS SELECT VCId, JobRegistryId, JobNamingId, JobPrefix, DATEADD(dd, DATEDIFF(week, CONVERT(DATETIME, ‘2013-01-01 00:00:00’, 102), JobDate) * 7 – 2, CONVERT(DATETIME, ‘2013-01-01 00:00:00’, 102)) AS JobDateWeekSeqStartDate, COUNT(*) AS JobCounts, FROM dbo.HistoricalJobInfo WHERE (JobStateId = 2) AND (TotalYieldTimeInMinutes = 0) GROUP BY VCId, JobRegistryId, JobNamingId, JobPrefix, DATEADD(dd, DATEDIFF(week, CONVERT(DATETIME, […]

.NETentity framework核心

我已经阅读了过去两年发布的关于EF的几乎所有其他问题。 我没有下载其他软件包的问题,​​它只是不会为我安装的entity framework。 我甚至尝试安装最新版本的Nuget并在我的项目目录中使用它的工具来恢复包 – 后来我将这行添加到我的.csproj中: 首先我尝试了这个命令: dotnet restore 输出这个: C:\Path\To\My\Project>dotnet restore Restore completed in 100.41 ms for C:\Path\To\My\Project\TestNuget.csproj. Restore completed in 68.84 ms for C:\Path\To\My\Project\TestNuget.csproj. 结果如下: > dotnet ef No executable found matching command “dotnet-ef” 所以我尝试了这个(使用最新版本的Nuget截至今天的日期): nuget restore Example.csproj 输出这个: MSBuild auto-detection: using msbuild version ‘15.6.85.37198’ from ‘C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\bin’. Committing restore… […]

如何以正确的方式取消异步查询

这是对这个问题的后续问题 。 我正在尝试从我的数据库加载数据,这需要5-10秒,但我希望GUI保持响应,并且它应该是可取消的。 private CancellationTokenSource _source; public IEnumerable Measurements { get { … } set { … } } private async void LoadData() { _source = new CancellationTokenSource(); using (var context = new TraceContext()) { Measurements = null; Measurements = await context.Measurements.ToListAsync(_source.Token); } } private void Cancel() { if (_source != null) _source.Cancel(); } public […]

使用Translate 映射EF实体列

我正在使用entity framework。 我正在调用一个返回多个数据集的存储过程。 其中一个结果集映射到我为其定义了枚举的实体,并定义了一个字符串支持属性以接收结果并解析枚举。 public class OrderInfo { [Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid orderID { get; set; } [NotMapped] public BillingStatus billingStatus { get; set; } [Required, Column(“billingStatus”)] public string billingStatusString { get { return billingStatus.ToString(); } private set { billingStatus = (BillingStatus)Enum.Parse(typeof(BillingStatus), value); } } } 不幸的是,在调用db.ObjectContext.Translate(…)时会忽略注释。 我收到一条错误消息 var cmd = db.Database.Connection.CreateCommand(); cmd.CommandText = […]