c# - 如何定义实体的填充方式?

标签 c# entity-framework

使用 Entity Framework (使用 MVC,但我认为这无关紧要),我试图创建一个...可扩展的实体。

我有许多类,用户可以将其标记为收藏夹或书签……实际上有几个不同的对象使用此功能。我目前在我的模型中实现它的方式是这样的(作为示例):

public class Favorite
{
   [key]
   public int FavoriteId {get; set;}

   public int? BikeId {get; set;}
   public virtual Bike Bike {get;set;}

   public int? HelmetId {get;set;}
   public virtual Helmet Helmet {get;set;}

   public int? ShoeId {get;set;}
   public virtual Shoe Shoe{get;set;}

   public int UserId {get;set;}
   public virtual User User {get;set;}
}

自行车、 Helm 、用户和鞋子类别都类似于:

public class Bike
{
   public int BikeId {get;set;}
   ...
   public virtual list<Favorties> Favorites {get;set;}
}

所以目前我的表看起来像这样:

Favorites:
|   Id   |  BikeId  |  HelmetId  | ShoeId   | UserId        |
|   1    |    5     |            |          | snowburnt     |
|   2    |    6     |            |          | jonh          |
|   3    |          |     2      |          | snowburnt     |

我更喜欢收藏夹对象的结构,其中有一个区分器列存储被引用的对象的名称作为多列主键的一部分,以便收藏夹表看起来更像这样(我知道用户 ID不是一个整数):

Favorites:
|   ID    |   Differentiator   |   foreignKeyId    | UserId       |
|    1    |     Bike           |    5              | snowburnt    |
|    2    |     Bike           |    6              | john         |
|    3    |     Helmet         |    2              | snowburnt    |

想要这样做的主要原因是,如果我有新对象要集成到收藏夹中,我就不必修改收藏夹对象的结构。

层次结构应该是这样的:

自行车、 Helm 等有 0 到多个收藏

这在 asp.net Entity Framework 中可能吗?我怎样才能做到这一点?有没有深入了解 Entity Framework 的好引用资料?

注意:我看过这里的帖子,http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph.aspx这会很好......如果我在这里有继承情况(我不能有继承情况的大部分原因是我有多个类或接口(interface)需要相同的关系:收藏夹,书签,评论,评论等).很可能我可以/应该使用收藏夹的界面(制作自行车、 Helm 收藏夹)。我还没有找到任何关于这将如何最终映射到 SQL 模式中的注释(那时甚至会有一个收藏夹表吗?)

最佳答案

如果您想要具有所描述结构的表,您必须为此使用 ADO.NET 和 SQL。 EF 无法映射它。 EF 只能映射真实关系(参照约束)。你的表没有真正的关系——它只有对你的应用程序有特殊意义的数据,EF 目前不支持数据驱动的映射,除了一些非常简单的场景,比如提到的每个层次继承的表。如果您想使用 EF,则必须接受当前的表结构。

关于c# - 如何定义实体的填充方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12566404/

相关文章:

c# - 并行运行时 IronPDF 死锁

c# - 如何将对象添加到包含另一个列表的列表

oracle - 使用 Oracle 数据库的 Entity Framework 数据库优先

c# - Entity Framework - 不映射到数据库表的抽象基类

c# - 删除时的 EF5 Code First 级联

c# - 在 C# Web API 中需要 HTTPS

c# - 如何将 UTF-8 byte[] 转换为字符串

c# - WPF 中真正的固定宽度字体

c# - 英孚。在没有 DbContext 的情况下调用实体验证

c# - Linq to Entities 和复杂类型转换