c# - 如何使用继承向 .NET Core 2.0 中的 aspNetUser 表添加字段
问题描述
我使用 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(种子数据库)每次我删除它以执行迁移时都会填充数据库,这正是我的程序爆发的地方!组装用户类并将其插入数据库时
我的 seader.cs 类验证是否有用户管理员....如果没有,它会创建它,但它是在组装用户对象时它落下
种子数据库.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("coambiado@ing.ucsc.cl");
if (user == null)
{
try
{
user = new User
{
Nombre = "Cristofher",
Apellido = "Ambiado",
Email = "coambiado@ing.ucsc.cl",
UserName = "coambiado@ing.ucsc.cl",
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();
}
}
我可以使用 lamdas 表达式来询问 CityId 的值吗?我的代码发生了什么?我做好这些改变了吗?seader 正在创建国家和城市,但无法在 Linq 的指示下获得它们……对我有什么帮助吗?
解决方案
要添加用户,最好像其他字段一样使用默认值。而不是这些代码行;
CityId = context.Countries.FirstOrDefault().Cities.FirstOrDefault().Id,
City = context.Countries.FirstOrDefault().Cities.FirstOrDefault()
例如,您可以使用它;
user = new User
{
Nombre = "Cristofher",
Apellido = "Ambiado",
Email = "coambiado@ing.ucsc.cl",
UserName = "coambiado@ing.ucsc.cl",
PhoneNumber = "+56958987975",
EmailConfirmed = true,
Address = "Calle Luna Calle Sol",
CityId = 1,
City = new City { Id =1, Name = "Concepción" }
};
推荐阅读
- python - 如何将模型的实例传递给Django中的另一个模型?
- wheelnav.js - 如何将 Wheelnav.js 旋转方向始终设置为短距离?
- java - 如何使用 RestTemplate 传递标头?
- wordpress - 如何设置添加到购物车按钮以从表单字段中获取价格?
- javascript - node.js 列出所有活动线程
- azure-keyvault - 在 Azure 密钥保管库中存储密钥和机密
- javascript - 为什么回调永远不会在while循环中被调用/执行?
- python - 如何修复文本计算器中的错误?- Python
- sql - 通过查询获取组中的所有列
- java - Ajax POST 删除多个 Spring MVC 同名项目