2013-05-07 4 views
2

Я получаю простой объект из формы в приложении MVC4Добавить объект в базу данных с именем

portfolio = {code: xxxxx, quantity: -10}

Мне нужно добавить имя пользователя в базу данных, когда я делаю это вставки, которые я уже знаю, что может получить из HTTPContext.

Что было бы лучшим способом включить это в приведенный ниже код. Я знаю, что мне нужно будет изменить объект, который я добавляю, но каков правильный способ сделать это?

public ActionResult Add(Portfolio portfolio) 
     { 
      var ctx = new MarginEntities(); 
      ctx.Portfolios.Add(portfolio); 
      ctx.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

ответ

1

Расширение Portfolio класс включает необходимые свойство:

class Portfolio 
{ 
    public string Code { get; set; } 
    public int Quantity { get; set; } 
    public string Username { get; set; } 
} 

Когда приходит запрос от клиента, поля Code и Quantity инициализируются, а значение Username установлено на значение по умолчанию, которое равно null. Поэтому просто инициализируйте его перед отправкой в ​​БД:

public ActionResult Add(Portfolio portfolio) 
{ 
    portfolio.Username = Session["Username"]; // or however the username is stored 

    var ctx = new MarginEntities(); 
    ctx.Portfolios.Add(portfolio); 
    ctx.SaveChanges(); 
    return RedirectToAction("Index"); 
} 
1

Вы можете использовать объект User, я беру его, все пользователи сначала аутентифицируются?

User.Identity.Name 

Ваш объект Portfolio может затем либо есть строка для имени пользователя или вы могли бы использовать FK для таблицы "пользователей, и получить этот идентификатор, передав в собственность название сверху.

Вы могли бы иметь либо:

class Portfolio 
{ 
    ...  
    public string Username { get; set; } 
} 

Если принять такой подход, то вы бы просто передать объект портфель с новым набором свойств Имя пользователя.

или

class Portfolio 
{ 
    ...  
    public int UserId { get; set; } 
} 

, если вы берете этот подход, то вам нужно будет просить UserId от EF контекста, а затем заполнить объект Portfolio с возвращенным UserId

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