2014-02-11 6 views
1

Я использую этот код для создания записи в таблице ClientAccountAccess. Однако в любой момент в этой таблице должно быть только одна запись. поэтому, если эта функция вызывается, я сначала хочу проверить, существует ли запись, если она ее удаляет, а затем добавить новую запись.если запись существует удалить?

 private static void SetAccessCode(string guidCode) 
     { 
      using (EPOSEntities db = new EPOSEntities()) 
      { 

//so here would I say something like (see below) 

       ClientAccountAccess client = new ClientAccountAccess(); 
       client.GUID = guidCode; 
       db.AddToClientAccountAccesses(client); 
       db.SaveChanges(); 
      } 
     } 

// 
ClientAccountAccess clientAccessCodes = db.ClientAccountAccesses 
        .OrderByDescending(x => x.Id) 
        .Take(1) 
        .Single(); 

       if clientAccessCodes.exists() 

        db.DeleteObject(clientAccessCodes); 
       db.SaveChanges(); 
+0

Что вопрос? (btw, смотри: вы создали условие гонки) –

+1

Вы не можете обновить запись? –

+1

Казалось бы, эти события должны выполняться как единое целое. Если это так, вы должны обернуть «TransactionScope» вокруг всего. –

ответ

1

Попробуйте что-то вроде этого ...

bool doesItExistAlready = (from caa in db.ClientAccountAccesses 
          where css.id == guidCode 
          select caa).Any(); 

if (doesItExistAlready) 
{ 
    // Delete old record 
    db.DeleteObject(PUTIDENTIFIERHERE); 
} 

// Add new record 
ClientAccountAccess client = new ClientAccountAccess(); 
client.GUID = guidCode; 
db.AddToClientAccountAccesses(client); 
1

вам действительно нужно удалить его? Если вы не можете сделать это:

private static void SetAccessCode(string guidCode) 
{ 
    using (EPOSEntities db = new EPOSEntities()) 
    { 
     var c= db.ClientAccountAccesses.FirstOrDefault(f=>f.GUID==guidCode); 
     if(c!=null) 
      return; 
     var client = new ClientAccountAccess(){GUID=guidCode}; 
     db.AddToClientAccountAccesses(client); 
     db.SaveChanges(); 
    } 
} 

Тогда вы только вставить его, если это сделать, уже не существует

Если вам необходимо удалить его перед созданием объекта. Вы можете сделать это:

private static void SetAccessCode(string guidCode) 
{ 
    using (EPOSEntities db = new EPOSEntities()) 
    { 
     var c= db.ClientAccountAccesses.FirstOrDefault(f=>f.GUID==guidCode); 
     if(c!=null) 
     { 
      db.ClientAccountAccesses.DeleteObject(c); 
      db.SaveChanges(); 
     } 
     var client = new ClientAccountAccess(){GUID=guidCode}; 
     db.AddToClientAccountAccesses(client); 
     db.SaveChanges(); 
    } 
} 

Если вы можете обновить объект, вы можете сделать что-то вроде этого:

private static void SetAccessCode(string guidCode) 
{ 
    using (EPOSEntities db = new EPOSEntities()) 
    { 
     var c= db.ClientAccountAccesses.FirstOrDefault(f=>f.GUID==guidCode); 
     if(c==null) 
     { 
      c=new ClientAccountAccess(); 
      db.AddToClientAccountAccesses(client); 
     } 
     c.GUID=guidCode; 
     db.SaveChanges(); 
    } 
} 
Смежные вопросы