从实体框架中的关系对象获取数据?

时间:2013-11-30 01:52:18

标签: asp.net-mvc linq entity-framework linq-to-entities

我是EF和Linq的初学者,所以我想知道使用一种或另一种方法的区别和优点,例如我可以看到在两个表之间获取数据,可以使用类似的东西:

var usr = from cm in ctx.ConsumerName
          join c in ctx.Consumer on cm.ConsumerId equals c.Id
          where cm.ConsumerId == consumerId
          select new { Nombre = cm.FirstName + cm.LastName, Email = c.Email };

同样,这样的事情是可能的:

var usr = ctx.ConsumerName.Include(x=>x.Consumer);

或类似的东西:

var consumer = ctx.Consumer.Find(id);
var vm = new ConsumerViewModel();
Mapper.CreateMap<Consumer, ConsumerViewModel>()
      .ForMember(dest => dest.Consumer, opt => opt.MapFrom(src => src));
vm = Mapper.Map<Consumer, ConsumerViewModel>(consumer);

有人可以解释一下,哪种方法可以通过MVC和EF从我的数据库中获取数据?感谢名单

1 个答案:

答案 0 :(得分:1)

使用Entity Framework创建和执行查询有许多不同的方法,例如LINQ,Entity SQL等。 LINQ to Entities主要是常用的,我认为这是使用EF从数据库获取数据的好方法。 您可以在这里了解更多关于LINQ的信息:

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

从您提供的代码示例中,我认为您对LINQ和实体框架的内容并不十分清楚。

var usr = from cm in ctx.ConsumerName
          join c in ctx.Consumer on cm.ConsumerId equals c.Id
          where cm.ConsumerId == consumerId
          select new { Nombre = cm.FirstName + cm.LastName, Email = c.Email };

上面是带有连接运算符的LINQ查询。

var usr = ctx.ConsumerName.Include(x=>x.Consumer);

以上是急切的加载。实体框架支持三种方式来加载相关数据,急切加载,延迟加载和显式加载。

var consumer = ctx.Consumer.Find(id);
var vm = new ConsumerViewModel();
Mapper.CreateMap<Consumer, ConsumerViewModel>().ForMember(dest => dest.Consumer, opt => opt.MapFrom(src => src));
vm = Mapper.Map<Consumer, ConsumerViewModel>(consumer);

上面是使用AutoMapper映射EF中实体的集合。

如果您想了解更多有关Entity Framework的信息,请看下面的链接,有很多很棒的文章 由专家撰写。

http://msdn.microsoft.com/en-US/data/ee712907#ef6