entity-framework - 使用 Entity Framework Core 3.1 在 OnModelCreating 中定义一对多关系
问题描述
我是 Entity Framework Core 3.1 的新手,并试图定义两个表之间的一对多关系。我目前正在努力并遇到编译错误。有人可以告诉我可能是什么问题。
错误是:
PersonNote 不包含 PersonNote 的定义
我目前正在排队
entity.HasOne(d => d.PersonNote)
我还能如何定义一对多关系?
这两个表是Person
和PersonNote
。一个Person
可以有很多PersonNote
s。我已经为他们定义了模型
public class Person
{
public int Id { get; set; }
public int? TitleId { get; set; }
public string FirstName { get; set; }
public string FirstNamePref { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public DateTime? DateOfBirth { get; set; }
public string Gender { get; set; }
public int AddressId { get; set; }
public string TelephoneNumber { get; set; }
public string MobileNumber { get; set; }
public string Email { get; set; }
public int? PartnerId { get; set; }
public bool Enabled { get; set; }
public string CreatedBy { get; set; }
public DateTime Created { get; set; }
public string ModifiedBy { get; set; }
public DateTime Modified { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime RecordStartDateTime { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime RecordEndDateTime { get; set; }
public Address Address { get; set; }
public Title Title { get; set; }
public Client Client { get; set; }
internal static IEnumerable<object> Include(Func<object, object> p)
{
throw new NotImplementedException();
}
public PersonNote PersonNote { get; set; }
}
public class PersonNote
{
public int Id { get; set; }
public int PersonId { get; set; }
public string Note { get; set; }
public int AuthorId { get; set; }
public string CreatedBy { get; set; }
public DateTime Created { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime RecordStartDateTime { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime RecordEndDateTime { get; set; }
}
public IEnumerable<PersonNote> GetPersonNotes(int personId)
{
var PersonNotes = PersonNote
.Include(x => x.)
.Where(x => x.Id == personId)
.ToList();
return PersonNotes;
}
我尝试了以下方法OnModelCreating
:
modelBuilder.Entity<PersonNote>(entity =>
{
entity.ToTable("PersonNote", "common");
entity.HasOne(d => d.PersonNote)
.WithMany(p => p.Person)
.HasForeignKey(d => d.PersonId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_commonPersonNote_commonPerson");
});
解决方案
你应该有这样的东西(省略其他属性):
class Person
{
[Key]
public int Id { get; set; }
public List<PersonNote> PersonNotes { get; set; }
}
class PersonNote
{
[Key]
public int Id { get; set; }
public int PersonId { get; set; }
}
class StackOverflow : DbContext
{
public DbSet<Person> Persons { get; set; }
public DbSet<PersonNote> PersonNotes { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasMany(p => p.PersonNotes)
.WithOne()
.HasForeignKey(p => p.PersonId);
}
}
推荐阅读
- testing - 我遇到了 Appium 的问题,无法修复
- php - $Post 上的 PHP 500 错误 我的代码中有任何错误吗?
- macos - unixODBC 在 Mac 上失败,“[IM004] [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed”
- javascript - 在 node-red/vanilla js 函数中模拟异步等待
- python-3.x - 在 matplotlib 图中插入 png 图像
- android - 如何在android studio中更改字符串的值以将其作为全局变量
- r - 在 R 中用 K-means 标记特定集群
- c# - Angular 9 + Angular Material Mat 表更新一条记录
- javascript - 如何在滚动时无限重复内容?
- redirect - JAX-RS:客户端:在遵循重定向之前拦截重定向