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

时间:2012-09-24 13:47:29

标签: c# 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;}
}

并且自行车,头盔,用户和鞋类都类似于:

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不是int):

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

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

层次结构应该类似于:

自行车,头盔等有0到多个收藏夹

这在asp.net实体框架中是否可行?我怎样才能做到这一点?有什么好的参考资料可以深入了解实体框架吗?

一个注意事项:我已经看过这里的帖子,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哪个会很好...如果我在这里有继承情况(大多数原因我不能有继承情况就是我有需要相同关系的多个类或接口:收藏夹,书签,评论,评论等)。很可能我可以/应该使用界面收藏(制作自行车,头盔收藏品)。我没有找到关于如何在SQL Schema中最终映射的任何注释(那么甚至会有一个收藏夹表吗?)

1 个答案:

答案 0 :(得分:0)

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