微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有多重关系的实体框架核心 TPH

如何解决具有多重关系的实体框架核心 TPH

我的数据库结构中的关系和鉴别器有问题。我需要做这样的事情:

Table that I need

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 举报,一经查实,本站将立刻删除。