ユーザーログイン成功後のデータベースの日付の更新asp.net mvc

私は自分のウェブサイトにログインしたユーザーの最新の更新を記録したいと思います。彼らが正常にログインした後、laseUpdateフィールドは現在の日付時刻に変更する必要があります。

私はこのコードを使用している:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ICEWeb.Models
{

public class CustomerModels:ItemEntityDataContext
{

    public bool ValidateCustomer(string username, string password)
    {

        bool b = (

                    this.DataContext
                        .Customers
                        .Where(s => s.ActiveInWebLogin == 1
                                    &&
                                    s.WebAccount == username
                                    &&
                                    s.Password == password
                               )
                        .SingleOrDefault()

                 ) != null;

        if (b == true)
            this.UpdateCustomerLastUpdateStatus();

        return b;

    }
    public void UpdateCustomerLastUpdateStatus()
    {
        Customer c = new Customer();
        c.LastWebLogIn = DateTime.Now;
        this.DataContext.SaveChanges();

    }

}

}

validateCustomer()は正常ですが、私のレコード(LastWebLogIn)は更新されません。 誰も私のためにこれを解決することはできますか? ありがとう。

0
すべての顧客は、2回目のログイン時にlastUpdateフィールドを更新する必要があります。
追加された 著者 Nothing,
UpdateCustomerLastUpdateStatusメソッドで新しいCustomerオブジェクトを作成しています。それは時間を更新したい特定の顧客でなければならないのですか?あなたのケースでは、フレームワークはどのフィールドを知りません、それは時間を更新する必要があります。
追加された 著者 Pawan Mishra,
私はあなたが達成しようとしていることを理解していますが、フレームワークに時間を更新したい "顧客"を明示的に伝える必要があります。新しい顧客を作成すると、彼に対応するデータベースには何もないので、何も更新されません。親切にも、このスレッドで人々が与えた回答を見てください。
追加された 著者 Pawan Mishra,

4 答え

新しいインスタンスを作成するのではなく、Customersオブジェクトの現在のインスタンスを作成し、それをデータベースに更新します。次のようなことを試してください:

public bool ValidateCustomer(string username, string password) 
{ 
    var user = this.DataContext.Customers 
                               .Where(s => s.ActiveInWebLogin == 1 && 
                                s.WebAccount == username && 
                                s.Password == password) 
                               .SingleOrDefault(); 

    if (user != null)
    { 
        this.UpdateCustomerLastUpdateStatus(user); 
        return true; 
    }
    return false;
}

public void UpdateCustomerLastUpdateStatus(Customers c) 
{ 
    c.LastWebLogIn = DateTime.Now; 
    this.DataContext.SaveChanges(); 
}
1
追加された
それはうまくいく。ありがとう。
追加された 著者 Nothing,

あなたは次のコードを試すことができます:

public bool ValidateCustomer(string username, string password)
    {

         var customer =           this.DataContext
                        .Customers
                        .Where(s => s.ActiveInWebLogin == 1
                                    &&
                                    s.WebAccount == username
                                    &&
                                    s.Password == password
                               )
                        .SingleOrDefault()

        if (customer != null)
            return this.UpdateCustomerLastUpdateStatus(customer);

        return false;

    }
    public void UpdateCustomerLastUpdateStatus(Customer c)
    {
        try
        {
            c.LastWebLogIn = DateTime.Now;
            this.DataContext.SaveChanges();
            return true;
        }
        Catch(Exception ex)
        {
           //Log the error
            return false;
        }
    }
0
追加された
ご回答有難うございます。
追加された 著者 Nothing,

未確認の新規顧客の LastWebLogIn を設定しています。最初の方法でデータベースから顧客を取り出し、そのオブジェクトを更新します(読み取り専用のデータコンテキストで最適化していないことを確認してください)。

0
追加された

新しい顧客を作成する場合は、 Table.InsertOnSubmitメソッドを使用します。

var customer = new Customer();
customer.LastWebLogIn = DateTime.Now;

this.DataContext.Customers.InsertOnSubmit(customer);
this.DataContext.SubmitChanges();

既存の顧客を更新する場合は、次の手順を実行する必要があります。

var customer = this.DataContext.Customers
    .Where(...)
    .Single();

customer.LastWebLogIn = DateTime.Now;
this.DataContext.SaveChanges();
0
追加された
あなたの投稿に感謝します。
追加された 著者 Nothing,