2011-09-30 65 views
0

我想从Asp.NET MVC网站使用LINQ to Entities的教程,但我决定使用LINQ to SQL代替。我正在创建一个新的表,名为Groups,它与Contacts表有关系。从本质上讲,这是一个一对多的关系,一个集团可以有很多联系人,一个联系人只能有一个集团。请参阅下面的示例代码和CRUD操作。LINQ to SQL在ASP.NET MVC和仓库模式

我不知道如何在LINQ to SQL中实现这一点。例如,如何在LINQ to SQL中执行此操作:

return _entities.GroupSet.Include(“Contacts”)。FirstOrDefault();

你应该为两张桌子做一个JOIN或者有另外一种方法吗?

例CODE:

using System.Collections.Generic; 
using System.Linq; 
using System; 

namespace ContactManager.Models 
{ 
    public class EntityContactManagerRepository : ContactManager.Models.IContactManagerRepository 
    { 
     private ContactManagerDBEntities _entities = new ContactManagerDBEntities(); 

     // Contact methods 

     public Contact GetContact(int id) 
     { 
      return (from c in _entities.ContactSet.Include("Group") 
        where c.Id == id 
        select c).FirstOrDefault(); 
     } 

     public Contact CreateContact(int groupId, Contact contactToCreate) 
     { 
      // Associate group with contact 
      contactToCreate.Group = GetGroup(groupId); 

      // Save new contact 
      _entities.AddToContactSet(contactToCreate); 
      _entities.SaveChanges(); 
      return contactToCreate; 
     } 

     public Contact EditContact(int groupId, Contact contactToEdit) 
     { 
      // Get original contact 
      var originalContact = GetContact(contactToEdit.Id); 

      // Update with new group 
      originalContact.Group = GetGroup(groupId); 

      // Save changes 
      _entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, contactToEdit); 
      _entities.SaveChanges(); 
      return contactToEdit; 
     } 

     public void DeleteContact(Contact contactToDelete) 
     { 
      var originalContact = GetContact(contactToDelete.Id); 
      _entities.DeleteObject(originalContact); 
      _entities.SaveChanges(); 
     } 

     public Group CreateGroup(Group groupToCreate) 
     { 
      _entities.AddToGroupSet(groupToCreate); 
      _entities.SaveChanges(); 
      return groupToCreate; 
     } 

     // Group Methods 

     public IEnumerable<Group> ListGroups() 
     { 
      return _entities.GroupSet.ToList(); 
     } 

     public Group GetFirstGroup() 
     { 
      return _entities.GroupSet.Include("Contacts").FirstOrDefault(); 
     } 

     public Group GetGroup(int id) 
     { 
      return (from g in _entities.GroupSet.Include("Contacts") 
         where g.Id == id 
         select g).FirstOrDefault(); 
     } 

     public void DeleteGroup(Group groupToDelete) 
     { 
      var originalGroup = GetGroup(groupToDelete.Id); 
      _entities.DeleteObject(originalGroup); 
      _entities.SaveChanges(); 

     } 

    } 
} 
+0

迈克为什么不去与实体框架?在.NET 4和4.5 DP中,微软有点像Linq to Sql,所以为什么要使用它?如果你正在开始一个新项目,我强烈建议使用EF –

+0

Argh ...我希望能够使用Linq到SQL,因为我更熟悉它。我已经在尝试学习MVC,并且我不想同时学习EF。我想我会改变我的解决方案来使用EF。谢谢您的帮助。 – MikeB55

回答

2

你需要指定一些DataLoadOptions为您创造的加入:

因此,要做到这一点,你必须创建一个DataContext每个类型的查询与正确的DataLoadOptions

var db = new WhateverDbDataContext(); 
DataLoadOptions options = new DataLoadOptions(); 
db.LoadOptions = options; 
options.LoadWith(x => x.Contacts); 

return db.SomeTable.FirstorDefault();