如何解决具有多重关系的实体框架核心 TPH
ID | RefId | RefTypeId | 姓名 |
---|---|---|---|
1 | 1 | 狗 | 卢克 |
2 | 2 | 猫 | 奎托斯 |
3 | 2 | 狗 | 黑豹 |
4 | 3 | 狗 | 关注 |
Owner Id - 是来自 Dog Table 或 Cat Table 的 ID,一切都取决于字段“OwnerTypeId”
public abstract class HomeAnimal
{
public int Age {get; set;}
public int RefId { get; set; }
}
public class DogAnimal : HomeAnimal
{
public Dog Dog { get; set; }
}
public class Catanimal : HomeAnimal
{
public Cat Cat { get; set; }
}
Dog 和 Cat 有其他类 - 基本字段和其他。 在方法 OnModelCreating(ModelBuilder modelBuilder) 中,我为 HomeAnimal 添加了鉴别器,例如:
modelBuilder.Entity<HomeAnimal>()
.ToTable("HomeAnimals")
.Hasdiscriminator<int?>("RefType")
HasValue<DogAnimal>((int)RefType.Dog)
.HasValue<Catanimal>((int)RefType.Cat);
在快照中一切正常,但如果我尝试向数据库添加新记录,则会出现关于“INSERT 语句与 FOREIGN KEY 约束冲突”的错误
如何为 HomeAnimal 类中的 RefId 设置多个关系?
编辑: 添加狗类,例如
public class Dog{
public string Type {get;set}
public ICollection<DogAnimal> DogAnimals {get;set;}
}
Cat 类与 dog 相同,但具有用于 Catanimal 的 ICollection。我没有这两个类的任何配置。我正在 SMSS 中对其进行测试 - 尝试插入具有正确引用类型的新记录。我在 Dog 和 Cat 表中有一行 - 这不是插入错误数据的问题
编辑 2:
var newDog = new Dog()
{
Name = "23",};
context.Add(newDog);
context.SaveChanges();
var newDogAnimal = new DogAnimal()
{
Age = 13,RefId = newDog.Id,};
context.Add(newDogAnimal);
context.SaveChanges();
/// Here throw error,after save changes
保存更改出错 ->
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_HomeAnimal_Cat_OwnerId".The conflict occurred in database "TestDatabase",table "dbo.Cat",column 'Id'.
The statement has been terminated.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。