Search code examples
linq-to-sqlplinqo

PLINQO / LINQ-To-SQL - Generated Entity Self Save Method?


Hi I'm trying to create a basic data model / layer

The idea is to have:

Task task = TaskRepository.GetTask(2);

task.Description = "The task has changed";

task.Save();

Is this possible? I've tried the code below

Note: The TaskRepository.GetTask() methods detaches the Task entity.

I'd expect this to work, any ideas why it doesnt?

Thanks

    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
    }

Solution

  • Having done some reading I've realised I was implmenting the Repository pattern incorrectly. I should have been adding the Save method to the repository for conventions sake.

    However, the actually problem I was having with regard to commiting the disconnected dataset was due to optimistic concurrency. The datacontext's job is to keep track of the state of it's entities. When entities become disconnected you loose that state.

    I've found you need to add a timestamp field to the database table or I can set the UpdateCheck field on each column in my dbml file.

    Here is some info about the UpdateCheck

    Some useful links about disconnected Linq and 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