2016-10-21 2 views
1

У меня есть форма, в которой пользователи будут вводить данные своего трейдера. При сохранении я также хочу сохранить текущего пользователя в таблице. У меня есть отношения «один ко многим», построенные в моих моделях, но не могу заставить пользователя использовать мой метод сохранения. Я попытался использовать ApplicationUser несколькими способами, но не могу заставить его правильно опубликовать. Вот мой текущий метод сохранения:Как сохранить текущего пользователя в другой таблице при сохранении объектов?

public void SaveCar(Cars carToSave) { 
     if (carToSave.Id == 0) { 
      _db.Cars.Add(carToSave); 
      _db.SaveChanges(); 
     } else { 
      var original = this.Find(carToSave.Id); 
      original.EmptyOrLoaded = carToSave.EmptyOrLoaded; 
      original.CarType = carToSave.CarType; 
      original.ShippedBy = carToSave.ShippedBy; 
      original.RailcarNumber = carToSave.RailcarNumber; 
      _db.SaveChanges(); 
     } 
    } 

И моя модель класса:

namespace Train.Models { 
public class Cars { 
    public int Id { get; set; } 
    public string EmptyOrLoaded { get; set; } 
    public string CarType { get; set; } 
    //Hopper, flatbed, tank, gondola, etc. 
    public string ShippedBy { get; set; } 
    //UP(Union Pacific) or BNSF 
    public string RailcarNumber { get; set; } 
    public virtual ApplicationUser ApplicationUser { get; set; } 

} 

И IdentityModels.cs

public class ApplicationUser : IdentityUser { 
    [StringLength(250, ErrorMessage = "About is limited to 250 characters in length.")] 
    public string Company { get; set; } 

    public virtual ICollection<Cars> Cargroup { get; set; } 
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager, string authenticationType) { 
     // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
     var userIdentity = await manager.CreateIdentityAsync(this, authenticationType); 
     // Add custom user claims here 
     return userIdentity; 
    } 
} 
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { 

    public IDbSet<Cars> Cars { get; set; } 
    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) { 
    } 

    public static ApplicationDbContext Create() { 
     return new ApplicationDbContext(); 
    } 
} 

}

+0

Ваша модель класса, пожалуйста? –

+0

отредактированный оригинал для добавления модели – ScottVMeyers

+0

Спасибо. И ваш пользовательский класс? Если вы хотите публиковать данные пользователя через Car, Пользователь должен быть свойством класса модели автомобиля. –

ответ

1

Вам нужно сохранить только ссылку на текущего пользователя.

User.Identity.GetUserId();//this will return your UserID 

EDIT: User.Identity доступен в контроллерах, если они наследуют Controller

+0

Спасибо! Я пробовал это несколько раз и просто не могу понять. Где я могу это выразить? – ScottVMeyers

+0

@ScottVMeyers Вы должны поместить его в свой контроллер, там доступен User.Identity. – mybirthname

+0

Хорошо, я думаю, что у меня это есть, но мне все равно нужно сохранить его в моем методе сохранения? – ScottVMeyers

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