EF CORE 数据注释和 JOINS
EF CORE Data Annotations and JOINS
我正在尝试查询旧数据库(我无法更改)。
每个 table 都有一个 RecordId,这是一个唯一的 ID。 table 由其帐号字段关联。
class tblOneToOne
{
[ForeignKey("Accountno")]
public string Accountno {get; set;}
public string Recordid {get; set; }
public string fields {get; set; }
}
class tblOneToMany
{
[ForeignKey("Accountno")]
public string Accountno {get; set;}
public string Recordid {get; set; }
public string Ref {get; set; }
}
class tblContact
{
[ForeignKey("Accountno")]
public string Accountno {get; set;}
[key]
public string Recordid {get; set; }
public string Company {get; set; }
public string Contact {get; set; }
public tblOneToOne tblOneToOne {get; set; }
public tblOneToMany tblOneToMany {get; set; }
}
我试过使用 Fluent Api 指定外键
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<tblContact>().ToTable("Contact")
.HasMany(c => c.tblOneToMany)
.WithOne(cs => cs.tblContact)
.HasForeignKey(c => c.Accountno);
}
然后我查询了一条确实有多个 tblOneToMany 记录的记录,但没有返回任何结果。
var c = _context.tblContact
.Include("tblOneToMany")
.FirstOrDefaultAsync(c => c.Accountno == accountno);
return c;
我应该怎样做才能返回正确的结果?
如有任何帮助,我们将不胜感激。
我终于设法使用 Fluent API 解决了我的问题。
我从 类 中删除了外键数据注释,并使用以下 Fluent Api 来指定表上的外键。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<tblContact>(entity =>
{
entity.HasKey(c => c.Accountno);
entity.HasOne(c => c.tblOneToOne)
.WithOne(c => c.tblContact)
.HasForeignKey<tblOneToOne>(c => c.Accountno);
entity.HasMany(c => c.tblOneToMany)
.WithOne(c => c.tblContact)
.HasForeignKey(cs => cs.Accountno);
});
}
我正在尝试查询旧数据库(我无法更改)。
每个 table 都有一个 RecordId,这是一个唯一的 ID。 table 由其帐号字段关联。
class tblOneToOne
{
[ForeignKey("Accountno")]
public string Accountno {get; set;}
public string Recordid {get; set; }
public string fields {get; set; }
}
class tblOneToMany
{
[ForeignKey("Accountno")]
public string Accountno {get; set;}
public string Recordid {get; set; }
public string Ref {get; set; }
}
class tblContact
{
[ForeignKey("Accountno")]
public string Accountno {get; set;}
[key]
public string Recordid {get; set; }
public string Company {get; set; }
public string Contact {get; set; }
public tblOneToOne tblOneToOne {get; set; }
public tblOneToMany tblOneToMany {get; set; }
}
我试过使用 Fluent Api 指定外键
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<tblContact>().ToTable("Contact")
.HasMany(c => c.tblOneToMany)
.WithOne(cs => cs.tblContact)
.HasForeignKey(c => c.Accountno);
}
然后我查询了一条确实有多个 tblOneToMany 记录的记录,但没有返回任何结果。
var c = _context.tblContact
.Include("tblOneToMany")
.FirstOrDefaultAsync(c => c.Accountno == accountno);
return c;
我应该怎样做才能返回正确的结果?
如有任何帮助,我们将不胜感激。
我终于设法使用 Fluent API 解决了我的问题。
我从 类 中删除了外键数据注释,并使用以下 Fluent Api 来指定表上的外键。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<tblContact>(entity =>
{
entity.HasKey(c => c.Accountno);
entity.HasOne(c => c.tblOneToOne)
.WithOne(c => c.tblContact)
.HasForeignKey<tblOneToOne>(c => c.Accountno);
entity.HasMany(c => c.tblOneToMany)
.WithOne(c => c.tblContact)
.HasForeignKey(cs => cs.Accountno);
});
}