efcore保存传入父类类型指向子类对象
时间: 2023-07-04 22:25:48 浏览: 54
如果您要使用Entity Framework Core来保存父类类型指向子类对象,可以使用继承映射。在继承映射中,您可以使用Discriminator列来标识每个子类类型。首先,将父类类型定义为抽象类,并在其上使用`[Table("ParentTable")]`属性进行标记。然后,为每个子类类型创建一个具体类,并在其上使用`[Table("ChildTable")]`属性进行标记,并通过继承父类类型来继承对其属性和方法的访问。
在实体类中,使用`[Discriminator]`属性标识每个子类的类型,然后使用`HasDiscriminator()`方法配置其Discriminator列。最后,使用`HasBaseType()`方法将子类类型与父类类型相关联。下面是一个示例代码:
```csharp
[Table("ParentTable")]
public abstract class Parent
{
public int Id { get; set; }
public string Name { get; set; }
}
[Table("ChildTable")]
public class Child1 : Parent
{
public int Age { get; set; }
}
[Table("ChildTable")]
public class Child2 : Parent
{
public string Address { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Parent>()
.HasDiscriminator<string>("Discriminator")
.HasValue<Child1>("Child1")
.HasValue<Child2>("Child2");
modelBuilder.Entity<Child1>();
modelBuilder.Entity<Child2>();
}
```
通过这种方式,您可以将父类类型指向子类对象,并在数据库中使用Discriminator列标识每个子类的类型。保存实体时,EF Core会自动将其保存到正确的表中,并使用Discriminator列来标识其类型。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)