0

您好我正在尝试创建一个基本的数据模型/层

这个想法是:

任务任务 = TaskRepository.GetTask(2);

task.Description = "任务发生了变化";

任务.保存();

这可能吗?我试过下面的代码

注意: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
    }
4

2 回答 2

1

做了一些阅读后,我意识到我错误地实现了存储库模式。为了约定,我应该将 Save 方法添加到存储库中。

然而,我在提交断开连接的数据集时遇到的实际问题是由于乐观并发。数据上下文的工作是跟踪其实体的状态。当实体断开连接时,您将失去该状态。

我发现您需要在数据库表中添加一个时间戳字段,或者我可以在我的 dbml 文件中的每一列上设置 UpdateCheck 字段。

以下是有关UpdateCheck的一些信息

关于断开连接的 Linq 和 plinqo 的一些有用链接

关于使用 LINQ 实现存储库模式的重要信息

实施更新和重新附加实体的简短教程

以前回答问题

Rick Strahl 谈 LINQ to SQL 和附加实体

于 2010-09-08T07:30:47.443 回答
0

不需要这一行(Task task = new Task();)。尽管我从未见过它以这种方式实现,但上面应该可以工作。您是否考虑过使用管理器?您是否遇到任何运行时错误?

谢谢-布莱克·涅米斯基

于 2010-09-08T01:36:14.227 回答