2010-09-07 93 views
0

您好我想創建一個基本的數據模型/層PLINQO/LINQ到SQL - 生成的實體自我保存方法?

的想法是有:

任務task = TaskRepository.GetTask(2);

task.Description =「任務已經改變」;

task.Save();

這可能嗎?我試過了下面的代碼

注意:TaskRepository.GetTask()方法分離了Task實體。

我希望這個工作,任何想法,爲什麼它不?

感謝

public partial class Task 
    { 
     // Place custom code here. 

     public void Save() 
     { 
      using (TinyTaskDataContext db = new TinyTaskDataContext { Log = Console.Out }) 
      { 
       db.Task.Attach(this); 


       db.SubmitChanges(); 
      } 
     } 


     #region Metadata 
     // For more information about how to use the metadata class visit: 
     // http://www.plinqo.com/metadata.ashx 
     [CodeSmith.Data.Audit.Audit] 
     internal class Metadata 
     { 
      // WARNING: Only attributes inside of this class will be preserved. 

      public int TaskId { get; set; } 

      [Required] 
      public string Name { get; set; } 

      [Now(EntityState.New)] 
      [CodeSmith.Data.Audit.NotAudited] 
      public System.DateTime DateCreated { get; set; } 

     } 

     #endregion 
    } 

回答

1

已經做了一些閱讀中,我已經意識到我被錯誤地implmenting Repository模式。爲了約定,我應該將Save方法添加到存儲庫中。

但是,我提交的關於提交斷開數據集的實際問題是由於樂觀併發。 datacontext的工作是跟蹤它的實體狀態。當實體斷開連接時,你將失去該狀態。

我發現你需要添加一個時間戳字段到數據庫表中,或者我可以在我的dbml文件的每一列上設置UpdateCheck字段。

以下是關於斷開的LINQ的UpdateCheck

一些有用的鏈接的一些信息和PLINQO

Great info on implementing the Repository pattern with LINQ

Short tutorial for implementing for updating and reattaching entities

Previously answer question

Rick Strahl on LINQ to SQL and attaching Entities

0

沒有必要爲此行(任務task =新的任務();)。上述應該工作,雖然我從來沒有看到它以這種方式實施。你有沒有想過使用經理?你是否遇到任何運行時錯誤?

感謝 -Blake Niemyjski

+0

對不起,我的錯誤,我應該刪除Task task = new Task(); – Mantisimo 2010-09-08 07:06:50

+0

我希望以不連通的方式工作。從我看到的沒有與上下文聯繫在一起的經理?...所以實際上我也有同樣的問題? – Mantisimo 2010-09-08 07:09:14

+0

我已經讀了關於使用版本庫模板實現PLINQO的夜晚。 http://jonkruger.com/blog/2008/02/10/linq-to-sql-in-disconnectedn-tier-scenarios-saving-an-object/ – Mantisimo 2010-09-08 07:11:34