это мой 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, либо аннотаций данных.
я также пытался поставить отношения с помощью текучего 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);
}
Таким образом, я также failed.Please предложить мне, как настроить его.
хорошо спасибо за ответ ur.It создал внешний ключ в базе данных с именем ApplicationUser_Id. Теперь, когда я пытаюсь загрузить pic, он не сохраняется в базе данных. Я думаю, проблема связана с FK created.Entity framework не знает, что туда положить. как исправить, что bro.i загрузил код здесь http://pastebin.com/ZWR2N4ZD – duke
, выполнив user = 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 column ApplicationUser_Id. Я думаю, проблема заключается в том, что внешний ключ создается на лету в базе данных, и я не могу добраться до этого свойства с помощью экземпляра UserProfileInfo, созданного выше, например IG.FileName или IG.ImageSize – duke