0

假设我有两个SQL表,我想要使用POCO T4模板生成一个EDMX模型(现在,使用automagical生成所有模型)。假设我们的两个表格是Person (ID, FName, LName)Comment (ID, PersonID, CommentText, CommentDate),两者之间有一对多关系(即,您可以对一个人进行很多评论)。将自定义属性添加到我的EF4模型

让我的POCO实体生成很简单,并且工作得很好。然而,我现在不知道该怎么做,是在我的Person实体上添加一个自定义导航属性,该属性代表该人员最近的评论(最终比最终评论还要复杂得多)。目前,它可以是只读的,但是如果知道如何处理可写属性也不错。

这样做的正确方法是什么?需要考虑的一件事是,我正在序列化这些实体,所以我将需要它们进行热切加载并以一种方式持续存在,这样我就可以用WCF将它们推送到我的UI中(也就是自定义的手写属性一个依赖延迟加载的扩展类不是一个选项)。

我已经非常擅长使用EF4作为标准的东西,但现在我已经进入了这个定制的东西,我不完全知道如何以最佳实践的方式做到这一点。

+0

理想情况下,我想调用Person.LatestComment并且调用Person.Comments.OrderByDescending(c => c.CommentDate).FirstOrDefault()'。 – Jaxidian 2010-05-12 22:49:30

回答

2

添加属性很简单。把它放在一个部分类中,与实体命名相同。但如果你的财产如下所示:

get 
{ 
    return this.Comments.OrderByDescending(c => c.CommentDate).FirstOrDefault(); 
} 

......那么它会工作,但你不能在L2E查询中使用它。

如果您需要L2E支持,您可以使用this technique

+0

您提供的示例将无法正常工作,因为我需要L2E查询和要序列化的值。我会研究你提到的其他技术。顺便说一句,感谢您跟踪我和我的问题,并为您提供的所有答案。 ;-) – Jaxidian 2010-05-13 15:23:28

+0

调查其他解决方案看起来相当复杂(不一定在消费,但至少在理解发生了什么)。因此,很难有一个直觉感觉它会如何工作。它是否会在急切加载,显式延迟加载和序列化的情况下工作?在我的EDMX映射中,我真的没有办法做到这一点吗?我认为我应该能够在那里发生“有趣的”映射,所以我可以从那些“有趣的”映射SQL优化的查询中受益... ... – Jaxidian 2010-05-13 16:18:11

+0

恕我直言,你的实体是错误的地方定制序列化。将自定义属性添加到实体与映射不同。是的,你可以在某种程度上做“有趣”的映射(例如,实体分裂),但是自定义属性完全是另一回事。 – 2010-05-13 16:25:56

相关问题