2013-04-19 28 views
5

Tüm bunlara yeni: UserProfile özelliğine sahip bir karakter için bir modelim var, böylece bir UserProfile girişiyle bir karakter alınabilir. Bu UserProfile'i bir Karakter için yabancı bir anahtar yapar.Erişim UserProfile bir denetleyiciden MVC 4

Karakter Modeli:

public class Character 
{ 
    public int ID { get; set; } 
    public virtual UserProfile user { get; set; } 
    public string name { get; set; } 
... 
} 

(başka yazının, emin değilim bu kalmalıdır çünkü eğer UserProfile özelliği sanal yapılmış)

Ben kullanıcı özelliğini ayarlamak istediğiniz yeni bir karakter yaratmak Mevcut web kullanıcısının isteğini yapan nesneye bu karakter./ Girişi

[HttpPost] 
public ActionResult Create(Character character) 
{ 
    if (ModelState.IsValid) 
    { 
     character.user = ??? 
     db.Characters.Add(character); 
     db.SaveChanges(); 
     ... 
} 

Sorun gelen UserProfile tabloya ulaşmak için nasıl bilmiyorum 'Karakter oluşturma' site tıklama ile kullanıcı hesabı oluşturun: Örneğin burada bir kullanıcı bir karakter yapmak alacağını süreçtir benim denetleyicim. Tipik bir tabloya erişmek için benim dbContext'in bir nesnesini yaratıyorum, ancak uygulamanızın diğer tüm nesneleri farklı bir dbContext kullanıyorken UserProfile tablosu varsayılan MVC 4 bağlamını kullanıyor.

  1. yüzden bütün tabloları 1 DBContext kullanmak başvurumu kurmak olmalı:

    benim için bir kaç çözüm, ben nasıl anlayabiliriz hiçbiri vardır tahmin ediyorum? Öyleyse nasıl?

  2. UserProfile'in zaten kullandığı varsayılan dbContext nesnesini oluşturmanın bir yolu var mı? Benim terminolojinin herhangi önceden Maalesef

kapalıysa veya eğer hayati bilgileri boş bırakılırsa. Gerektiğinde daha fazlasını sağlayacağım. Teşekkürler

cevap

3

Genellikle geçerli kullanıcı kimliğini bir oturum değişkenine kaydediyorum ve daha sonra ihtiyaç duyduğumda bu kullanıcıyı DB'den aldım. Yani kodu aşağıdaki gibi olabilir: Eğer KullanıcıNo veya Kullanıcı Adı gibi kullanıcı bilgilerine kaydedilir

[HttpPost] 
public ActionResult Create(Character character) 
{ 
    if (ModelState.IsValid) 
    { 
     character.user = db.UserProfiles.Find(u => u.UserID = (int) Session["UserID"]); 

     db.Characters.Add(character); 
     db.SaveChanges(); 
    ... 
} 
+1

Ayrıca, eğer unutmayı unutursa kafasının karışmış olabileceğini düşünüyorum. UserProfile varlıklarının sahipliği. Chris, AccountModels.cs'a bak. Orada 'UsersContext' denilen ayrı bir' DbContext' olmalıdır. Ya onu kullanabilir ya da kendi ile birleştirebilirsiniz. – Matt

+2

Sahipliğini kendinize taşıyarak ve 'UsersContext' öğesini tamamen silerek sahiplenmenizi öneririm. – Matt

+0

Matt, haklısın, yapmak istediğim şey bu. Mümkün olduğunda, kullanıcıların nerelere bakacağından ve nasıl yapılacağından emin değildim. Kendi cevabınızı nasıl yazacağınıza dair biraz daha fazla ayrıntı ile yazmak isterseniz, bunu takdir ediyorum. Teşekkürler! –

7

saklanacaktır WebSecurity.CurrentUserId

WebSecurity.CurrentUserName

[HttpPost] 
public ActionResult Create(Character character) 
{ 
    if (ModelState.IsValid) 
    { 
     character.user = db.UserProfiles.Find(u => u.UserID = WebSecurity.CurrentUserId); 

     db.Characters.Add(character); 
     db.SaveChanges(); 
    ... 
} 
+0

eşitlik işleci, db.UserProfiles.Find (u => u.UserID == WebSecurity.CurrentUserId); – Dughall