相关疑难解决方法(0)

如何使用Entity Framework 6更新记录?

我正在尝试使用EF6更新记录.首先找到记录,如果存在,则更新它.这是我的代码: -

var book = new Model.Book
{
    BookNumber =  _book.BookNumber,
    BookName = _book.BookName,
    BookTitle = _book.BookTitle,
};
using (var db = new MyContextDB())
{
    var result = db.Books.SingleOrDefault(b => b.BookNumber == bookNumber);
    if (result != null)
    {
        try
        {
            db.Books.Attach(book);
            db.Entry(book).State = EntityState.Modified;
            db.SaveChanges();
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

每次我尝试使用上面的代码更新记录时,我收到此错误: -

{System.Data.Entity.Infrastructure.DbUpdateConcurrencyException:存储更新,插入或删除语句影响了意外的行数(0).自实体加载后,实体可能已被修改或删除.刷新ObjectStateManager entrie

c# entity-framework ef-database-first entity-framework-6

227
推荐指数
10
解决办法
48万
查看次数

从实体框架中删除单个记录?

我在实体框架中有一个SQL Server表,名为employ一个名为的单个键列ID.

如何使用Entity Framework从表中删除单个记录?

c# sql-server entity-framework

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

Find()与FirstOrDefault()的性能

类似的问题:
Find()vs. Where().FirstOrDefault()

在具有单个字符串属性的简单引用类型的大序列中搜索Diana有一个有趣的结果.

using System;
using System.Collections.Generic;
using System.Linq;

public class Customer{
    public string Name {get;set;}
}

Stopwatch watch = new Stopwatch();        
    const string diana = "Diana";

    while (Console.ReadKey().Key != ConsoleKey.Escape)
    {
        //Armour with 1000k++ customers. Wow, should be a product with a great success! :)
        var customers = (from i in Enumerable.Range(0, 1000000)
                         select new Customer
                         {
                            Name = Guid.NewGuid().ToString()
                         }).ToList();

        customers.Insert(999000, new Customer { Name = diana }); // Putting Diana at the end :)

        //1. System.Linq.Enumerable.DefaultOrFirst() …
Run Code Online (Sandbox Code Playgroud)

.net c# linq performance

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

System.Data.Sqlite 1.0.99 guid比较不起作用

我正在使用C#的System.Data.Sqlite 1.0.99,你可以用EF调用db.我面临选择的问题时FirstOrDefault通过Guid它回到null(但这样的GUID在数据库中存在行):

var user = context.Users.FirstOrDefault(x => x.Id == userId); //returns null
//or
var user = context.Users.Where(x => x.Id == userId).ToArray(); //returns empty array
Run Code Online (Sandbox Code Playgroud)

找到一些已知问题的信息,它已在1.0.95修复,但在1.0.97和下两个解决方案中又被破坏:

解决方案1:将连接字符串上的BinaryGUID属性设置为true:

Data Source=...;BinaryGUID=True;
Run Code Online (Sandbox Code Playgroud)

解决方案2:设置下一个环境变量(在建立连接之前):

   Environment.SetEnvironmentVariable("AppendManifestToken_SQLiteProviderManifest", ";BinaryGUID=True;");
Run Code Online (Sandbox Code Playgroud)

解决方案2有效,因为(来自sqlite站点):

AppendManifestToken_SQLiteProviderManifest - 如果将此环境变量设置为[to anything],System.Data.SQLite.Linq.SQLiteProviderManifest类(以及System.Data.SQLite.EF6.SQLiteProviderManifest类)将使用它来修改将来的提供程序清单标记.将环境变量的值附加到现有提供程序清单标记(如果有).通常,为了使构造的提供者清单标记在语法上正确,环境变量值[要附加]必须以分号开头.

解决方案1对我不起作用,因为据我所知,它仅对System.Data.SQLite.Linq.SQLiteProviderManifest有影响.

问题:是否有任何解决方案可以解决此问题而不是设置环境变量?

c# sqlite entity-framework guid

9
推荐指数
1
解决办法
597
查看次数

在Linq中,.FirstOrDefault和.SingleOrDefault之间的区别是什么

我不知道之间的区别FirstOrDefaultSingleOrDefault.我何时应该使用第一个?何时应该使用第二个?

linq entity-framework

8
推荐指数
2
解决办法
5190
查看次数

确定null或计数0的最佳方法

我有一个iQueryable,我需要知道它是否为null或没有值.

IQueryable<people> L = (from p in people 
                        where p.lastname.Contains("y") 
                        select p);
if (L != null && L.Count() > 0) {
   return "Something";
} else {
   return "NOTHING";
}
Run Code Online (Sandbox Code Playgroud)

好吧,如果你使用L.Count()它将使用更多的资源.有没有更好的办法?不使用的东西L.Count()

c# linq

7
推荐指数
1
解决办法
3716
查看次数

为什么IF语句会影响我的LINQ语句的结果?

我最近一直在和LINQ一起工作,感谢一些StackOverflowers的帮助,我得到了这个声明:

var traceJob =
    from jobDefinition in service.JobDefinitions
    where jobDefinition.Id == traceGuid
    select jobDefinition;

if (traceJob != null && traceJob.Count() == 1)
{
 traceJob.First().RunNow();
 Console.WriteLine(traceJob.First().DisplayName + "  Last Run Time: " + traceJob.First().LastRunTime);
}
Run Code Online (Sandbox Code Playgroud)

但是,我感到很困惑,因为使它工作的那块是if(traceJob.Count() ==1).如果我删除该部分,那么我会收到一个ObjectNullRef错误,指出枚举traceJob没有产生任何结果.

现在,据我所知,if检查计数的语句实际上不应该改变Linq语句的结果吗?任何人都可以向我解释为什么我会看到这种行为?

c# linq sharepoint

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

实体框架6.0代码优先 - 在按主键过滤时,在简单查询中获取重复项

在我的项目中,我们使用EF Code First(v.6.0.0.0)和MS SQL Server 2012.

我已将实体框架更新到第6版.奇怪的是,在更新后的某个时刻,我开始通过主键过滤记录时获得重复的项目.

首先,我开始在以下代码中获取"Sequence包含多个元素"异常

var cateringService = context.CateringServices
                             .SingleOrDefault(x => x.Id == query.CateringServiceId)
Run Code Online (Sandbox Code Playgroud)

我检查了数据库和参数 - 这Id是一个主键,它被标记为唯一,参数是有效的.由于Id在映射中设置为主键:

this.HasKey(x => x.Id);
Run Code Online (Sandbox Code Playgroud)

我已经用FirstOrDefault代码取代了调用,并且代码运行良好.我试图使用以下代码检索谓词的所有项目:

var cateringServices = context.CateringServices
                              .Where(x => x.Id == query.CateringServiceId)
                              .ToList();
Run Code Online (Sandbox Code Playgroud)

似乎我得到了'CateringService'实体的13个实例引用了同一行.请查看附带的截图:

在此输入图像描述 在此输入图像描述

我也开始A relationship multiplicity constraint violation occurred: An EntityReference can have no more than one related object, but the query returned more than one related object.通过实体引用访问CateringService实体时获得异常.我们正在使用惰性方法并启用延迟加载.

当尝试使用Include("CateringService")Everythings 尝试访问'CateringService'时,我们不能只是替换所有SingleOrDefault调用,并且此时从项目中删除所有延迟加载用法.

请指教.

UPDATE …

.net c# ef-code-first entity-framework-6

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

System.Collections.Generic.Find()vs Linq.First()

任何人都可以告诉我何时使用Find()和何时使用First()?如果您只是想要一个简单的查询来查找列表中的特定项目,那么一个比另一个好吗?

.net c# linq

5
推荐指数
2
解决办法
3587
查看次数

FirstOrDefault(),SingleOrDefault(),Any()等......哪一个是最快的?

在关于上述和/或包括其他的方法,如果你正在寻找一个记录,且只有一个记录存在,其中之一将执行的最快?例如,我要确保,一旦发现被查询的价值,我正在寻找一个将返回它的时候了,而无需通过剩余的记录搜索.

.net linq

4
推荐指数
1
解决办法
6723
查看次数