LINQ with / Entity Framework - 填充对象

时间:2011-07-31 18:51:49

标签: c# .net linq entity-framework

我不确定实体框架是否可以实现,但我复制的代码填充对象太多了。

目前我的方法有类似的内容:

return (from s in context.some_table
    join u in context.user_table on s.user_id equals u.id
    where s.id == someId
    select new MyObject()
    {
        TableColumn = s.some_column,
        User = new MyUser()
        {
            Username = u.username,
            Id = u.id,
        }
    }.FirstOrDefault();

我只是输入了一个例子。我有很多查询,其中包含有关用户的信息(不仅仅是在该示例中)。因此,在我的所有查询中,我都将相同的代码块放入其中。如果我有100个方法,并且我想要添加另一个返回的列,那么我必须更新100个方法。屁股疼痛。

我想要做的是通过可重用的方法填充User对象。这样,添加/删除返回的列只需要在一个地方更改。像:

return (from s in context.some_table
    join u in context.user_table on s.user_id equals u.id
    where s.id = someId
    select new MyObject()
    {
        TableColumn = s.some_column,
        User = FillUser(u)
    }.FirstOrDefault();

FillUser将是方法。当然,这不适用于Entity Framework。

有什么我可以做的吗?我当然可以返回整个用户表,但这比我需要的信息更多,所以这是浪费。

如果有帮助,我正在使用.NET 4.0。

1 个答案:

答案 0 :(得分:2)

实体框架是ORM工具,因此其主要目的是定义从数据库到对象的映射,并基于该映射加载实体。显然,如果您需要100次相同的用户投影,则可以选择映射数据库视图,自定义defining query或自定义query view。您正在滥用投影而不是创建可重复使用的映射。