2011-09-30 64 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();