Я использую таблицу aspNetUser для хранения своих пользователей система, поэтому мне нужно знать, какая страна и город относятся к этим, для этого я добавил следующие модели Город и страна
public class Country : IEntity
{
public int Id { get; set; }
[Required]
[Display(Name = "Country")]
[MaxLength(50, ErrorMessage = "The field {0} only can contain {1} characters length.")]
public string Name { get; set; }
public ICollection<City> Cities { get; set; }
[Display(Name = "# Cities")]
public int NumberCities { get { return this.Cities == null ? 0 : this.Cities.Count; } }
}
public class City : IEntity
{
public int Id { get; set; }
[Required]
[Display(Name = "Ciudad")]
[MaxLength(50, ErrorMessage = "el campo {0} solo puede contener {1} caracteres de largo.")]
public string Name { get; set; }
}
и я добавляю в свой класс User, что он наследуется от IdentityUser, поля CityId и объекта City с целью введения этих полей в мою таблицу aspNetUser
public class User : IdentityUser
{
[Display(Name = "Nombre")]
[MaxLength(50, ErrorMessage = "el campo {0} solo debe contener {1} caracteres de largo.")]
public string Nombre { get; set; }
[Display(Name = "Apellido")]
[MaxLength(50, ErrorMessage = "el campo {0} solo debe contener {1} caracteres de largo.")]
public string Apellido { get; set; }
[Display(Name = "Dirección")]
[MaxLength(100, ErrorMessage = "el campo {0} solo debe contener {1} caracteres de largo.")]
public string Address { get; set; }
public int CityId { get; set; }
public City City { get; set; }
}
Проблема заключается в моем классе SeaderDB.cs (начальная база данных), который заполняет базу данных каждый раз, когда я удаляю ее для выполнения миграции, именно здесь моя программа разрывается! при сборке класса User и вставке его в базу данных
мой класс seader.cs проверяет есть ли пользователь admin.... если нет, то создает его, но именно в момент сборки объекта пользователя он и падает
SeedDB.CS:
public async Task SeedAsync()
{
await this.context.Database.EnsureCreatedAsync();
await userHelper.CheckRoleAsync("Dios");
await userHelper.CheckRoleAsync("Admin");
await userHelper.CheckRoleAsync("User");
var user = await userHelper.GetUserByEmailAsync("[email protected]");
if (user == null)
{
try
{
user = new User
{
Nombre = "Cristofher",
Apellido = "Ambiado",
Email = "[email protected]",
UserName = "[email protected]",
PhoneNumber = "+56958987975",
EmailConfirmed = true,
Address = "Calle Luna Calle Sol",
CityId = context.Countries.FirstOrDefault().Cities.FirstOrDefault().Id,
City = context.Countries.FirstOrDefault().Cities.FirstOrDefault()
};
}
catch (Exception error)
{
}
var result = await userHelper.AddUserAsync(user, "fytitosk8");
if (result != IdentityResult.Success)
{
throw new InvalidOperationException("No se pudo crear el usuario");
}
await userHelper.AddUserToRoleAsync(user, "Dios");
}
var isInRole = await userHelper.IsUserInRoleAsync(user, "Dios");
if (!isInRole)
{
await userHelper.AddUserToRoleAsync(user, "Dios");
}
//AGREGAR PRODUCTOS
if (!this.context.Productos.Any())
{
this.AddProductos("COMBO 1 + JUGO CITRICO", user);
this.AddProductos("ENSALADA CESAR + JUGO CITRICO", user);
this.AddProductos("MENU VEGAN 1 + POSTRE", user);
this.AddProductos("MENU VEGAN 2 + POSTRE", user);
await this.context.SaveChangesAsync();
}
//AGREGAR PAISES
if (!this.context.Countries.Any())
{
var cities = new List<City>();
cities.Add(new City { Name = "Concepción" });
cities.Add(new City { Name = "Santiago" });
cities.Add(new City { Name = "Iquique" });
cities.Add(new City { Name = "Valdivia" });
this.context.Countries.Add(new Country
{
Cities = cities,
Name = "Chile"
});
await this.context.SaveChangesAsync();
}
}
Могу ли я использовать лямда-выражения, чтобы запросить значение CityId? Что происходит с моим кодом? Хорошо ли я делаю эти изменения? моряк создает страну и города, но не может получить их по инструкциям Linq ... мне что-нибудь поможет?
Для добавления пользователя лучше использовать значение по умолчанию, как и в других полях.
Вместо этих строк кода;
CityId = context.Countries.FirstOrDefault().Cities.FirstOrDefault().Id,
City = context.Countries.FirstOrDefault().Cities.FirstOrDefault()
Например, вы можете использовать это;
user = new User
{
Nombre = "Cristofher",
Apellido = "Ambiado",
Email = "[email protected]",
UserName = "[email protected]",
PhoneNumber = "+56958987975",
EmailConfirmed = true,
Address = "Calle Luna Calle Sol",
CityId = 1,
City = new City { Id =1, Name = "Concepción" }
};
Оо. Я не обратил внимания. Ты прав. Затем вы можете сначала построить объект города, а затем добавить его. я исправлю свой ответ
City - это свойство типа City, связанное с User .... (это не может быть строка), стоит отметить, что его решение сработало, и оно позволяет мне компилировать.