2012-05-08 3 views
2

Я пытаюсь обновить таблицу пользователя с одним обновлением значения, но я не могу понять, что я делаю неправильно. это то, что у меня есть:Обновление записи с использованием LINQ Context?

public static void ApplyROB(string ROBread, string userName) 
     { 
      using (SERTEntities ctx = CommonSERT.GetSERTContext()) 
      { 
        // +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 
        // Audit of the transfer 
       datUser trUser = new datUserRole(); 
       trUser.ROB = ROBread; 
       trUser.AccountName = userName; 
       // Persist update to DB 
       ctx.SaveChanges(); 

      } 
     } 

am i i way off? ничего не происходит, когда я нажимаю на обновление. Как я могу сказать, где username = имя пользователя? я сделал это правильно?

в основном нужен простой:

update datUser set ROB = "Y" where AccountName= "myusername" 

это оказывается немного более сложным в использовании LINQ контекст

пожалуйста, помогите.

ответ

5

Вы не добавляете свой новый объект в контекст, поэтому при сохранении контекст не знает о каких-либо изменениях. Вам нужно что-то вроде ...

ctx.datUserRoles.Add(datUserRole) 

Для обновления, вам необходимо извлечь объект из контекста, внести в него изменения, а затем сохранить ... так:

var entity=ctx.datUserRoles.SingleOrDefault(dur=>dur.AccountName==someUserName); 
if(entity!=null) 
{ 
    entity.someProp=someVal; 
    ctx.SaveChanges(); 
} 
else 
{ 
    throw new UnexpectedOperationException(); //or however you want to fail 
} 
+0

сейчас я получаю ошибки. я должен быть на правильном пути (до того, как ничего не происходит вообще), но как узнать, выполняется ли это обновление или вставка? –

+0

Вам нужно сделать обновление? См. Пересмотренный ответ ... – spender

+0

большой успех! Спасибо за вашу помощь! –

2

Если вы требуется обновление. Может быть, что-то вроде этого:

public static void ApplyROB(string ROBread, string userName) 
{ 
    using (SERTEntities ctx = CommonSERT.GetSERTContext()) 
    { 
     var trUser= ctx.datUserRole.Where(a=>a.AccountName==userName) 
            .FirstOrDefault(); 
     if(trUser!=null) 
     { 
      trUser.ROB = ROBread; 
      ctx.SaveChanges(); 
     } 
    } 
} 

Если вы уверены, что вы всегда будете иметь что-то для обновления вы можете использовать First(). Тогда вам не нужно проверять, trUser is null

+0

спасибо! a => a - - это переменная, которую я должен заменить, или просто оставить ее как? –

+0

Это выражение linq. Так что да, вам это нужно – Arion

+0

спасибо, спасибо! похоже, я понял! –

1

spender правильный, в некотором смысле неправильный в другом: вы хотите обновить существующую запись.

Для этого вам необходимо выбрать запись первого, например:

var user = 
    (from u in ctx.datUserRoles 
    where u.AccountName == "accountname" 
    select u).FirstOrDefault(); 

Где accountname действительный предмет того же типа - это не имеет значения, так как вы можете выбрать его, как вы хотите, вы можете коснуться этого, чтобы соответствовать вашим критериям. Затем, как только у вас есть предмет, выполните следующие действия:

if (user != null) { 
    user.ROB = ROBread; 
    ctx.SaveChanges(); 
} 
+2

Yay для "splender"! Читайте внимательно ... это на самом деле «spender»! – spender

+1

@spender Я законно извиняюсь. Не значит обижаться. –

Смежные вопросы