這是我ApplicationUser class.I僅添加了一個新的屬性----配置在asp.net身份一一對應的關係
public class ApplicationUser : IdentityUser
{
//public ApplicationUser()
//{
// UserProfileInfo = new UserProfileInfo { ImageSize = 0, FileName = null, ImageData = 0 };
//}
public string HomeTown { get; set; }
public virtual UserProfileInfo UserProfileInfo { get; set; }
,這是我userProfileInfo類,我想保存每個用戶的個人資料相片後,他們已經完成了註冊----
public class UserProfileInfo
{
// [Key, ForeignKey("ApplicationUser")]
[Key]
public int Id { get; set; }
public int ImageSize { get; set; }
public string FileName { get; set; }
public byte[] ImageData { get; set; }
[ForeignKey("Id")]
public virtual ApplicationUser ApplicationUser { get; set; }
}
,這是我的DbContext類-----
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfileInfo> UserProfileInfo { get; set; }
現在,問題是我無法配置ApplicationUser類和UserProfileInfo類之間的一對一關係。我嘗試過各種方法來做到這一點,並遵循先前提出的一些堆棧溢出問題。但在完成我的註冊表單後,錯誤------
無法確定類型「CodeFirstContext.ApplicationUser」和「CodeFirstContext.UserProfileInfo」之間關聯的主體端點。該關聯的主要目的必須使用關係流暢API或數據註釋來顯式配置。
我也試圖把關係用流利的API -----
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// base.OnModelCreating(modelBuilder);
//// Configure Id as PK for UserProfileInfo class
modelBuilder.Entity<UserProfileInfo>()
.HasKey(e => e.Id);
// Configure Id as FK for UserProfileInfo
modelBuilder.Entity<ApplicationUser>()
.HasOptional(s => s.UserProfileInfo)
.WithRequired(ad => ad.ApplicationUser);
}
這樣,我也失敗。請建議我如何配置它的幫助。
擴展您的流暢映射,非常感謝您的答覆。它在名爲ApplicationUser_Id的數據庫中創建了一個外鍵。現在,當我嘗試上傳圖片時,它不會保存回數據庫中。我認爲問題是由FK創建的。實體框架不知道該放什麼。如何解決bro.i已經在這裏上傳代碼http://pastebin.com/ZWR2N4ZD – duke
通過做用戶= UserManager.FindById找到登錄的用戶,你可以做我的答案上面(設置userprofileinfo UserManager.Update)。如果你像在你的例子中那樣通過dbcontext去,你首先必須獲取用戶(var user = dc.Users.First(c => c.Id == someUserId);)然後設置userprofile(user.UserProfileInfo = x )。最後是cs.SaveChanges。如果按照其他方式完成,請設置UserProfile的用戶(IG.ApplicationUser = someuser)。請注意,您的代碼只支持一個上傳pr用戶,您可能希望將其更改爲獲取用戶,檢查信息是否存在 - >更新或添加 – Indregaard
var user = UserManager.FindById(User.Identity.GetUserId()); var user1 = dc.Users.First(c => c.Id == user.Id);現在,如何將該user1保存在數據庫FK列ApplicationUser_Id中。我認爲問題是外鍵是在數據庫中飛行創建的,我無法通過上面創建的UserProfileInfo實例獲得該屬性,如IG.FileName或IG.ImageSize – duke