【发布时间】:2019-10-09 04:13:07
【问题描述】:
我有 EF Core 3.0 preview4 的奇怪行为。 我有主课:
public enum ClientType
{
Customer = 0,
Produces = 1,
}
public class User : IdentityUser<Guid>
{
public ClientType ClientType { get; set; }
public SMSCodeInfo SMSCodeInfo { get; set; }
public string Discriminator { get; set; }
}
在这段代码中 SMSCodeInfo 是一个类:
public class SMSCodeInfo
{
public long Code { get; set; }
public DateTime Expiration { get; set; }
public SMSCodeInfo() { }
public SMSCodeInfo(int days, int hours, int minutes) : this(DateTime.Now.AddDays(days).AddHours(hours).AddMinutes(minutes)) { }
public SMSCodeInfo(DateTime Expiration)
{
this.Expiration = Expiration;
Code = new Random().Next(100000, 999999);
}
}
我尝试通过不同的方法将SMSCodeInfo作为拥有数据添加到User类中:[Owned]属性用法,在OnModelCreating(ModelBuilder modelBuilder)方法中添加代码:
modelBuilder.Entity<User>().OwnsOne(o => o.SMSCodeInfo);
但是每次我进行迁移时,我都会得到 2 个表:AspNetUsers 带有关于用户的身份信息(我在我的项目中使用 Asp.net 核心身份)和AspNetUsers1 表,其中包含 SMSCodeInfo 成员. EF Core 生成此代码用于迁移,我无法理解“为什么”!
migrationBuilder.CreateTable(
name: "AspNetUsers1",
columns: table => new
{
UserId = table.Column<Guid>(nullable: false),
Code = table.Column<long>(nullable: false),
Expiration = table.Column<DateTime>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AspNetUsers1", x => x.UserId);
table.ForeignKey(
name: "FK_AspNetUsers1_AspNetUsers_UserId",
column: x => x.UserId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
“附加”。我希望将拥有的数据添加到 AspNetUser 表中,而不是单独的表中。
附:从 IdentityUser 派生的类会出现此问题。对于我的项目代码中的其他类,像 modelBuilder.Entity<TOwner>().OwnsOne(o => o.ToBeOwned); 这样的工作正确并提供具有注入的拥有类型的正确表。
【问题讨论】:
标签: c# entity-framework asp.net-core .net-core