2013-06-25 68 views
0

我正在学习EF。我的代码如下所示。避免添加副本

我添加了关键注释,因为当我添加一个符号时,它应该被添加一次而没有更多。所以如果增加欧元/美元,我不希望有不同的欧元/美元。然而,在这个程序的不同运行中,当我运行代码时,它会抱怨密钥已经存在。如果上下文不在数据库中,它是如何创建上下文的,或者如果上下文已经存在,如何获取它的引用?

using (var db = new TickDataTestContext()) 
      { 
       var td = new SymbolTickDataEntity { Symbol = symbol }; 
       db.SymbolTickData.Add(td); 
       db.SaveChanges(); 

       while (true) 
       { 
        etc.... 


public class SymbolTickDataEntity 
{ 
    public int SymbolTickDataEntityID { get; set; } 

    [Key] 
    [Required] 
    public string Symbol { get; set; } 

    public virtual IList<MarketDataDepthEntity> Mdds { get; set; } 
    public SymbolTickDataEntity() { Mdds = new List<MarketDataDepthEntity>(); } 
} 

public class TickDataTestContext : DbContext 
{ 
    public DbSet<MarketDataEntity> MarketData { get; set; } 
    public DbSet<MarketDataDepthEntity> MarketDataDepth { get; set; } 
    public DbSet<SymbolTickDataEntity> SymbolTickData { get; set; } 
} 

回答

2

您可以在插入SymbolTickData前查看它是否存在。

if(!db.SymbolTickData.Any(a => a.Symbol.Equals(symbol))) 
    { 
     db.SymbolTickData.Add(td); 
     db.SaveChanges(); 
    } 
+0

谢谢你的作品。 – user1676605