をこれは私のViewModelされるリンクではありません私の問題は、私はhttppostの有効なviewmodelを取得することです、私はプレーヤーにユーザーを追加します(それはカスタムクラスであり、プレーヤークラスでは仮想ユーザーです)。すべてが大丈夫です(プレーヤーには正しいユーザーが含まれています)が、次回は他のビューでユーザーを取得しようとします。ユーザーのプロパティはnullです。私はそれをデータベースでチェックし、UserIDを持つ列にはintがありません。だから多分誰かが私の問題をどこに助けることができる?なぜそれは貯蓄していないのですか?ViewModelには、仮想クラス
編集:
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
db.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
及びこれにコントローラの変化: 私は私のリポジトリにこのコードを追加
[Authorize,HttpPost]
public ActionResult Upravit(int id, PlayerViewModel playerView)
{
if (ModelState.IsValid)
{
using (PlayerRepository playerRepository = new PlayerRepository())
{
playerView.Player.User = playerRepository.GetUserByID(playerView.SelectedUserID);
playerRepository.Save(playerView.Player);
return RedirectToAction("Podrobnosti", new { id = playerView.Player.PlayerID });
}
}
return View(playerView);
}
を、それは助けをdidn't。
EDIT2 私のプレーヤーとユーザークラス:
public class User
{
public User()
{
}
public User(int userId, string userName, string firstName, string surname, string password, string email)
{
UserID = userId;
UserName = userName;
Name = firstName;
Surname = surname;
Password = password;
Email = email;
IsActivated = false;
}
[HiddenInput(DisplayValue = false)]
public int UserID { get; set; }
[Display(Name="Uživatelské jméno")]
[Required(ErrorMessage = "Je potřeba vyplnit uživatelské jméno.")]
[StringLength(20)]
public string UserName { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
[Display(Name = "Heslo")]
[DataType(DataType.Password)]
[Required(ErrorMessage = "Je potřeba vyplnit heslo.")]
[StringLength(30)]
public string Password { get; set; }
[Display(Name = "E-mail")]
[DataType(DataType.EmailAddress)]
[Required(ErrorMessage = "Je potřeba vyplnit Váš e-mail.")]
[StringLength(30)]
public string Email { get; set; }
public IIdentity Identity { get; set; }
public string ImagePath { get; set; }
public virtual ICollection<Article> Articles { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual ICollection<Topic> Topics { get; set; }
public int RoleId { get; set; }
public virtual Role Role { get; set; }
public bool IsActivated { get; set; }
public string EmailKey { get; set; }
}
}
public class Player
{
[Key]
public int PlayerID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Surname { get; set; }
public string PhotoUrl { get; set; }
public string Post { get; set; }
public virtual Team Team { get; set; }
public virtual User User { get; set; }
}
私は、コントローラ内のすべてのメソッドにレポを使用して追加し、コントローラ上のDisposeメソッドを追加し、今私はデータを示すとの問題を抱えています。たとえば、Player.User.UserNameを表示しようとしたとき(私はプレイヤーにいくつかのユーザーを手動で追加しました)、インスタンスObjectDataContextが破棄されて使用できないと言います。
Entity Frameworkを使用しているようです。'Player'と' User'クラスのソースコードを提供してください。 –
UserクラスとPlayerクラスを追加しました。 –
私はサンプルコンソールアプリケーションを作成しました。これはうまくいきます: 'Player'を保存した後、正しい' User'プロパティをコンテキストから取得しました。 PlayerRepository.Retrieve()メソッドの実装を見せてください。 –