我有一个奇怪的场景,不知道你能不能帮我.
我有包含一对多关系的实体.在父实体上,我不想添加作为子实体列表的导航属性.相反,我希望它包含子实体的单个实例.在查询时,我会通过子实体的一列来约束子实体.
[Table("parent")]
public class Parent
{
[Key]
[Column("parentid")]
public long ParentId { get; set; }
[Column("name")]
public string Name { get; set; }
// This navigation property functions as expected until I go to insert another record into the chil table.
// Instead the existing record gets updated.
public Child Child { get; set; }
}
[Table("child")]
public class Child
{
[Key]
[Column("childid")]
public long ChildId { get; set; }
[Column("name")]
public string Name { get; set; }
public List<Grandchild1> Grandchildren1 { get; set; }
public List<Grandchild2> Grandchildren2 { get; set; }
public List<Grandchild3> Grandchildren3 { get; set; }
}
[Table("grandchild1")]
public class Grandchild1
{
[Key]
[Column("grandchildid")]
public long ChildId { get; set; }
}
[Table("grandchild2")]
public class Grandchild2
{
[Key]
[Column("grandchildid")]
public long ChildId { get; set; }
}
[Table("grandchild3")]
public class Grandchild3
{
[Key]
[Column("grandchildid")]
public long ChildId { get; set; }
}
public class FamilyDbContext: DbContext
{
public DbSet<Parent> Parents { get; set; }
public DbSet<Child> Children { get; set; }
public DbSet<Grandchild1> Grandchildren1 { get; set; }
public DbSet<Grandchild2> Grandchildren2 { get; set; }
public DbSet<Grandchild3> Grandchildren3 { get; set; }
public Parent GetParent()
{
Parent parent = Parents
.Include(p => p.Child).ThenInclude(c => c.Grandchildren1)
.Include(p => p.Child).ThenInclude(c => c.Grandchildren2)
.Include(p => p.Child).ThenInclude(c => c.Grandchildren3)
.FirstOrDefault(p =>
p.Name == "ParentName" &&
p.Child.Name == "ChildName");
return parent;
}
}
我try 手动创建关系,但随后查询联接到了错误的列.
可能还值得注意的是,我将实际过滤的Child上的字段/列是由枚举支持的.因此,单个父项的子记录数量将是有限的.
我考虑了在Parent上 for each 枚举值设置一个属性的 idea .