Вставьте и измените две разные таблицы одновременно в asp.net mvc - PullRequest
1 голос
/ 29 ноября 2011

Я хочу обновить поле в моей таблице и вставить некоторую информацию о пользователе, который успешно вошел в систему на моем веб-сайте, в другую таблицу. Это мой код:

public class CustomerModels:ItemEntityDataContext
{

    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(Customer c)
    {
        c.LastWebLogIn = DateTime.Now;

        String ipAddress = System.Web.HttpContext.Current.Request.UserHostAddress;

        WebsiteTracking web_track = new WebsiteTracking();
        web_track.IDUser = c.ID;
        web_track.ActiveLoginDate = DateTime.Now;
        web_track.IPAddress = ipAddress;

        this.DataContext.SaveChanges();


    }


}

Когда я писал это, он только изменял поле LastWebLogIn в таблице Customer, но не вставлял в поле таблицы WebsiteTracking.

Кто-нибудь может решить эту проблему? Спасибо.

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Чтобы обновить объект в Linq до SQL:

  1. первый доступ к объекту
  2. обновить свои значения
  3. Выполнить Context.SubmitChanges ();

Проверить измененный код. Вы можете обновить несколько объектов одновременно, но вы должны позаботиться об отношениях внешнего ключа / или правилах, которые создает объект / класс сущности.

     public void UpdateCustomerLastUpdateStatus(Customer c)
        {
        using ( var context = new this.DataContext())  
    // if you have created object on page then it may no need to create object again for DataContext
        {

Customer cust = DataContext.Customer.Single(cu => cu.ID == c.ID);
// Validate cust that your Customer Id if it is supposed to be null reference issue.
cust.LastWebLogIn = DateTime.Now;

            String ipAddress = System.Web.HttpContext.Current.Request.UserHostAddress;

            WebsiteTracking web_track = new WebsiteTracking();
            web_track.ActiveLoginDate = DateTime.Now;
            web_track.IPAddress = ipAddress;

            cust.WebsiteTracking.Add(web_track);
            //or
            DataContext.WebsiteTracking.Add(web_track);

            this.DataContext.SaveChanges();
        }            

        }
1 голос
/ 29 ноября 2011

Возможно, вы захотите добавить созданную WebsiteTracking в коллекцию this.DataContext.WebsiteTracking. Другой способ - использовать свойство WebsiteTracking вашего объекта User. Пока вы не используете один из них, DataContext ничего не знает о web_track объекте.

public void UpdateCustomerLastUpdateStatus(Customer c)
{
    c.LastWebLogIn = DateTime.Now;

    String ipAddress = System.Web.HttpContext.Current.Request.UserHostAddress;

    WebsiteTracking web_track = new WebsiteTracking();
    web_track.ActiveLoginDate = DateTime.Now;
    web_track.IPAddress = ipAddress;

    c.WebsiteTracking.Add(web_track);

    this.DataContext.SaveChanges();


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...