Я использую первоочередную структуру кода объекта.
Для моего приложения клиент должен иметь создателя, который является пользователем из AspNetUser.
Класс клиента
public class Customer
{
public string CreatorId { get; set; }
[ForeignKey("CreatorId")]
public ApplicationUser Creator { get; set; }
}
IdentityModel
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("AgueroCRMDbContext", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
После сборки я все еще могу зарегистрироваться / войти, но я получаю эту ошибку при попытке доступа к клиентам
AgueroCRM.Data.Service.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType.
AgueroCRM.Data.Service.IdentityUserRole: : EntityType 'IdentityUserRole' has no key defined. Define the key for this EntityType.
IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no keys defined.
IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no keys defined.
Line 38: public IEnumerable<Customer> GetAll()
Line 39: {
Line 40: return from r in db.Customer <-- error occurs here
Line 41: orderby r.Id
Line 42: select r;
Все работало, пока я не решил добавить эту внешнююключ.
Редактировать: Я думаю, что это может быть связано с невозможностью доступа к IdentityDbContext, который содержит ApplicationUser из DbContext, который содержит клиентов.
Кто-нибудь знает, как решить эту проблему?
Решено: путем слияния моего ApplicationDbContext с моим Main DbContext
public class AgueroCRMDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Customer> Customer { get; set; }
public AgueroCRMDbContext()
: base("AgueroCRMDbContext", throwIfV1Schema: false)
{
}
public static AgueroCRMDbContext Create()
{
return new AgueroCRMDbContext();
}
}