gpt4 book ai didi

c# - 如何在 C# 中将持久实体转换为具体类型

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:52 25 4
gpt4 key购买 nike

我的代码结构如下所示。我知道这个例子有点奇怪,但我正在处理的实体在结构上是相似的。

interface IAnimal 
{
string name {get; set;}
int Age { get; set;}
string AnimalType { get; set;}
ICollection<Dependent> Dependents{get; set;}
}

interface IDependent : IAnimal
{

string RelationshipToParent{get; set;}
}

class Dependent : IDependent
{
public string name { get; set;}
public int Age { get; set;}
public string AnimalType { get; set;}
public string RelationshipToParent { get; set;}
public ICollection<Dependent> Dependents { get; set;}
}

class Animal : IAnimal
{
public string name { get; set;}
public int Age { get; set;}
public string AnimalType{get; set;}
public ICollection<Dependent> Dependents { get; set;}
}


class Tiger : IAnimal
{
public string name { get; set;}
public int Age { get; set;}
public string AnimalType{get; set;}
public ICollection<Dependent> Dependents { get; set;}
}

class Dog : IAnimal
{
public string name { get; set;}
public int Age{ get; set;}
public string AnimalType{get; set;}
public ICollection<Dependent> Dependents{ get; set;}
}

class DogDependent : Dependent
{

}

class TigerDependent : Dependent
{

}

动物可以像任何其他动物一样有家属(例如..老虎可以有狗和大象这样的家属)Animal 和 Dependent 类是 SQL Server 中的持久实体(使用 Entity Framework )。我的问题是我有大约 20 个这样的具体动物。从 DB 读取实体后,我需要一种复杂的方法来根据 AnimalType 属性将 Animal 转换为具体类型,如 Tiger、Dog 等。

例子..如果 Animal 对象的 AnimalType 是“Tiger”,那么 Animal 应该被转换成 Tiger 类型(具有所有属性)。 Dependent 也一样,如果 Animal 类型的 Dependent 是 Dog,那么 Dependent 应该转换成 DogDependent。

除了为每种类型编写映射器之外,还有更好的方法吗?

最佳答案

如果我理解正确的话,你问的是如何将你的对象模型映射到关系模型,对吗?如果是这种情况,那么有很多模式可以做到这一点。如果您已经定义了数据模型并且所有具体动物(老虎、大象等)都在同一张表中,那么最容易使用的策略是每个具体类一个表。您所要做的就是添加一个鉴别器列来区分每种类型,并告诉 EF 如何根据此将每条记录映射到特定类。

有很多文章描述了不同的策略,这是一篇:

http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph

关于c# - 如何在 C# 中将持久实体转换为具体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36555999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com