2

我正在尝试使用单个值更新来更新用户表,但我无法弄清楚我做错了什么。这就是我所拥有的:

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();

            }
        }

我走远了吗?当我点击更新时没有任何反应。我怎么说,其中用户名 = 用户名?我做对了吗?

基本上需要一个简单的:

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

在 LINQ 中使用 Context 变得有点复杂

请帮忙。

4

3 回答 3

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
}
于 2012-05-08T15:08:43.960 回答
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(). 然后你不需要检查是否trUsernull

于 2012-05-08T15:11:34.063 回答
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();
}
于 2012-05-08T15:15:13.813 回答