В настоящее время я занимаюсь разработкой веб-приложения, которое содержит информацию о пользователях и информацию, связанную с кредитами.Я использую Asp.Net Identity для управления и обработки создания учетных записей пользователей в веб-приложении, и у меня есть несколько других таблиц, которые содержат информацию, непосредственно связанную с пользователем.
Я создал таблицу (IdentityProfile), котораясвязан с таблицей AspNetUsers в платформе Identity.Затем каждая таблица подключается к этой таблице как ссылка на функциональность учетной записи пользователя в приложении.См. Мой ERD:
Ссылка на диаграмму отношений сущностей
Таблицы IdentityProfile и UserProfile имеют следующее ссылочное ограничение: UserProfile -> IdentityProfile на основе поля первичного ключа ProfileId вкаждая таблица.
Я могу успешно создать запись профиля идентичности с соответствующей записью UserProfile:
public void CreateUserProfile(string title, string firstname, string lastname, DateTime dob, IdentityUser user)
{
if(user != null) //Given the successfuly creation of a user account.
{
Guid profileId = user.Email.ConvertToMD5GUID();
IdentityProfile identityProfile = new IdentityProfile //Manual Table Association Link (i.e. Between AspNetUsers Table and UserProfile Table).
{
Id = user.Id,
ProfileId = profileId,
};
identityProfile.UserProfile = new UserProfile
{
ProfileId = profileId,
Title = title,
FirstName = firstname,
LastName = lastname,
DOB = dob,
DateRegistered = DateTime.Now,
KBAFailed = false,
CreditTrolleyRatingsRegistrationStatus = false,
CreditActivityNotificationStatus = true,
ThirdPartyPartnerNotificationStatus = true,
CreditOffersNotificationStatus = true
};
ConsumerData.IdentityProfiles.Add(identityProfile);
ConsumerData.SaveChanges();
}
}
Однако, когда дело доходит до доступа к созданной записи UserProfile, профиль Identity возвращаетсяnull и SqlException: недопустимое имя столбца 'UserProfile_ProfileId'.Неверное имя столбца 'UserProfile_ProfileId'.
public void CreateCreditFootprint()
{
IdentityProfile identityProfile = ConsumerData
.IdentityProfiles
.Single(profile
=> profile.Id == CurrentUserId);
//An issue with the way in which the user profile is instantiated.
identityProfile.UserProfile.CreditFootprint = new CreditFootprint //ERROR OCCURS ON THIS LINE - SPECICIALLY on identityProfile.UserProfile returing null.
{
CreditReportId = identityProfile.UserProfile.LastName.ToString().ConvertToMD5GUID(),
CreditScore = short.Parse(new Random().Next(500, 710).ToString()), //Example score.
CreditScoreStatus = "Good", //Example status.
CumulativeDebt = new Random().Next(1000, 10000), //Example debt.
LastRetrieved = DateTime.Now,
};
ConsumerData.SaveChanges();
}
//Migrate method over to UserAccountLink class.
public void CreateCreditApplicationProfile()
{
IdentityProfile identityProfile = ConsumerData
.IdentityProfiles
.SingleOrDefault(profile
=> profile.Id == CurrentUserId);
identityProfile.UserProfile.CreditApplicationProfile = new CreditApplicationProfile {
ApplicationProfileId = identityProfile.UserProfile.FirstName.ToString().ConvertToMD5GUID(),
ApplicationCount = 0,
ApplicationsAcceptedCount = 0,
ApplicationsDeclinedCount = 0,
PendingApplicationsCount = 0
};
ConsumerData.SaveChanges();
}
Все записи были успешно созданы в таблицах базы данных (то есть AspNetUsers, IdentityProfile (LINK) и UserProfile соответственно).Исключение выдается, когда я нахожу существующую запись IdentityProfile и пытаюсь получить доступ к ее ссылке UserProfile - см. Строку identityProfile.UserProfile.CreditApplicationProfile.
Любая помощь будет принята с благодарностью.
МногиеСпасибо,
Бен.
Вот мой исправленный код:
public partial class IdentityProfile
{
public string Id { get; set; }
[Required]
[ForeignKey("UserProfile")]
public System.Guid ProfileId { get; set; }
public virtual UserProfile UserProfile { get; set; }
}
public partial class UserProfile
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public UserProfile()
{
this.IdentityProfiles = new HashSet<IdentityProfile>();
}
public System.Guid ProfileId { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public System.DateTime DOB { get; set; }
public System.DateTime DateRegistered { get; set; }
public bool RegistrationStatus { get; set; }
public bool KBAFailed { get; set; }
public bool CreditActivityNotificationStatus { get; set; }
public bool ThirdPartyPartnerNotificationStatus { get; set; }
public bool CreditOffersNotificationStatus { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
[InverseProperty("UserProfile")]
public virtual ICollection<IdentityProfile> IdentityProfiles { get; set; }
public virtual CreditApplicationProfile CreditApplicationProfile { get; set; }
public virtual CreditFootprint CreditFootprint { get; set; }
}
Ошибка после обновления
Неверное имя столбца Пример ошибки