【发布时间】:2017-11-15 12:08:01
【问题描述】:
我正在尝试使用 EF Core 2.0 中新增的 EntityConfiguration 接口。
附录可能有助于查看 Message 类
public class Message
{
public int MessageId { get; set; }
[Required]
public string MessageForUserId { get; set; }
public virtual ApplicationUser MessageForUser { get; set; }
[Required]
public string MessageFromUserId { get; set; }
public virtual ApplicationUser MessageFromUser { get; set; }
[Required]
public string MessageContent { get; set; }
public bool MessageRead { get; set; }
[Required]
public DateTime MessageCreatedOn { get; set; }
public DateTime? MessageReadOn { get; set; }
}
和 AppUser 类
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
public Gender Gender { get; set; }
public SubscriptionLevel SubscriptionLevel { get; set; }
public NotificationType NotificationType { get; set; }
public string AvatarUrl { get; set; }
public ICollection<Message> UserMessages { get; set; }
public ICollection<Message> SentMessages { get; set; }
public ICollection<IdentityUserClaim<string>> Claims { get; set; }
}
这是在我的OnModelCreating 方法中定义实体的方式。
builder.Entity<Message>()
.HasOne(x => x.MessageForUser)
.WithMany(x => x.UserMessages)
.HasForeignKey(x => x.MessageForUserId)
.OnDelete(DeleteBehavior.Restrict);
builder.Entity<Message>()
.HasOne(x => x.MessageFromUser)
.WithMany(x => x.SentMessages)
.HasForeignKey(x => x.MessageFromUserId)
.OnDelete(DeleteBehavior.Cascade);
我的 IEntityTypeConfiguration
public class AppUserConfig : IEntityTypeConfiguration<ApplicationUser>
{
public void Configure(EntityTypeBuilder<ApplicationUser> builder)
{
builder.Property(u => u.FirstName).HasMaxLength(31);
builder.Property(u => u.FirstName).IsRequired();
builder.Property(u => u.LastName).HasMaxLength(55);
builder.Property(u => u.LastName).IsRequired();
builder.Property(u => u.DateOfBirth).HasColumnType("datetime");
builder.Property(u => u.DateOfBirth).IsRequired();
builder.Property(u => u.Gender).IsRequired();
}
}
EF 6 方式有一个 HasForeignKey 方法关闭构建器,该方法不再可用,我似乎找不到任何方法来添加它们。
以下是迁移从我的OnModelCreating 方法构建表的方式。我想把这些项目中的大部分放在我的配置类中。
migrationBuilder.CreateIndex(
name: "IX_Messages_MessageForUserId",
schema: "AppContext",
table: "Messages",
column: "MessageForUserId");
migrationBuilder.CreateIndex(
name: "IX_Messages_MessageFromUserId",
schema: "AppContext",
table: "Messages",
column: "MessageFromUserId");
migrationBuilder.AddForeignKey(
name: "FK_Messages_AspNetUsers_MessageForUserId",
schema: "AppContext",
table: "Messages",
column: "MessageForUserId",
principalSchema: "AppContext",
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
migrationBuilder.AddForeignKey(
name: "FK_Messages_AspNetUsers_MessageFromUserId",
schema: "AppContext",
table: "Messages",
column: "MessageFromUserId",
principalSchema: "AppContext",
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
还有一个 HasIndex 方法,但我不确定如何在 HasIndex 的 lambda 表达式中复制迁移产生的内容。
【问题讨论】:
标签: c# entity-framework-core ef-fluent-api