c# - Entity Framework ,我以前添加过这个条目吗?

标签 c# entity-framework-6

我有一个简单的实体。

public partial class Thing
{
    public Thing()
    {}

    public int Id { get; set; }
    public string Name { get; set; }
 }

我正在向 localDB 数据库中插入数千个新条目,但只有少数几个独特的东西。 如果我在每次插入后都保存更改,那么它会运行得很慢,但如果我不保存更改,那么我无法判断 newThing.Name 是否已经存在。 或者我可以吗?我对检查上下文中存在的东西与数据库与 SaveChanges 之前/之后的位置非常困惑。谁能为我澄清一下?

Thing newThing = new Thing();
newThing.Name = "MyName";

context.Things.Add(d);

//returns null
Thing myFirstThing = context.Things.FirstOrDefault(c => c.Name == newThing.Name);

//returns false 
if (context.Detectors.Any(c => c.Name == newThing.Name))
{  //do some stuff}

最佳答案

我认为您可以使用 DbContext 上的 ChangeTracker 来执行此操作,但是,它可能会很慢。

//(warning: free-handing this):
myContext.ChangeTracker.Entries<theEntityType>().Any(e => e.State == EntityState.Added && e.Entity.TheField == yourString);

我认为(或者一些接近的东西会起作用,但它可能会变得非常慢,因为你在每次调用时扫描一个集合。(每次添加后它会变慢一点 - 一个有 1000 个成员的集合会燃烧很多滴答声)

相反,您可以在添加实体时将实体添加到 Dictionary 中。字典中基于键的查找是 O(1),因此即使字典中有一百万个条目,查找也非常快。保存实体时清除字典以减少内存占用。

关于c# - Entity Framework ,我以前添加过这个条目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36795374/

相关文章:

c# - Entity Framework 6 : Unable to load the specified metadata resource

c#-4.0 - rowVersion 在 Entityframe 工作中被映射到 byte[8],但是当手动转换它时是 byte[18]

c# - WinForms 中的 EF : how to filter data in BindingSource/DGW (. Local.ToBindingList())

c# - "or"应该与 .Net4 Hasflags 一起工作 : enum. HasFlag(AccessRights.Read | AccessRights.Write)

c# - 如何在 Nancy on Mono 中获取真正的错误消息?

c# - EF6 中是否可以使用特定于查询的 DbExecutionStrategies?

c# - Entity Framework : Function Import - Code Generated In Designer But Not Recognized By Compiler

c# - 如何处理通过 Next 属性迭代的对象?

c# - C# 中的 BufferManager 和 System.Buffers.ArrayPool 有什么区别

c# - 在 C# 中更改辅助监视器屏幕分辨率