我是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从我的数据库中获取数据?感谢名单
答案 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的信息,请看下面的链接,有很多很棒的文章 由专家撰写。