Ling to sql更新エンティティの概要

15056 ワード

本文はみんなにLing to sql更新実体を紹介して、多くの人がまだLing to sql更新実体を理解していないかもしれませんが、大丈夫です.本文を見終わったら、きっと多くの収穫があります.本文がもっと多くのことを教えてくれることを望んでいます.
Ling to sqlエンティティの更新は大変です!一般的なネット上の例では、このようなものがあります.
1 Customer cust = db.Customers.First(c => c.CustomerID == "ALFKI");

2 cust.ContactTitle = "Vice President";

3 db.SubmitChanges();

 
しかし、階層化システムでは、データベース操作がデータアクセス層に書き込まれ、エンティティが定義され、インタフェースが抽象化されるようです.
エンティティークラス:
 1 /// <summary>

 2 ///     

 3 /// summary>

 4 [Table(Name = "EDM_TaskPlan")]

 5 public class TaskPlan

 6 {

 7 /// <summary>

 8 ///     

 9 /// summary>

10 [Column(IsDbGenerated=true,IsPrimaryKey=true,Name="PlanID")]

11 public int PlanID { get; set; }

12 /// <summary>

13 ///     

14 /// summary>

15 [Column(Name="PlanName")]

16 public string Name { get; set; }

17 /// <summary>

18 ///     

19 /// summary>

20 [Column]

21 public string Description { get; set; }

22 /// <summary>

23 ///      

24 /// summary>

25 [Column]

26 public string MondayDef { get; set; }

27 /// <summary>

28 ///      

29 /// summary>

30 [Column]

31 public string TuesdayDef { get; set; }

32 /// <summary>

33 ///      

34 /// summary>

35 [Column]

36 public string WednesdayDef { get; set; }

37 /// <summary>

38 ///      

39 /// summary>

40 [Column]

41 public string ThursdayDef { get; set; }

42 /// <summary>

43 ///      

44 /// summary>

45 [Column]

46 public string FridayDef { get; set; }

47 /// <summary>

48 ///      

49 /// summary>

50 [Column]

51 public string SaturdayDef { get; set; }

52 /// <summary>

53 ///      

54 /// summary>

55 [Column]

56 public string SundayDef { get; set; }

57 }

 
データアクセスインタフェース:
 1 /// <summary>

 2 ///           

 3 /// summary>

 4 public interface ITaskPlanDao

 5 {

 6 /// <summary>

 7 ///     

 8 /// summary>

 9 /// <returns>returns>

10 TaskPlan[] FindAll();

11 /// <summary>

12 ///       

13 /// summary>

14 /// <param name="id">      param>

15 /// <returns>returns>

16 TaskPlan FindByID(int id);

17 /// <summary>

18 ///      

19 /// summary>

20 /// <param name="taskPlan">      param>

21 /// <returns>returns>

22 int SaveOrUpdate(TaskPlan taskPlan);

23 /// <summary>

24 ///       

25 /// summary>

26 /// <param name="id">      param>

27 /// <returns>returns>

28 void DeleteByID(int id);

29 }

 
しかし、Ling to sqlがエンティティを更新したときに問題が発生しました.
1 dbContext.Attach(taskPlan);

2 //      

3 dbContext.Attach(taskPlan,true);

4 //An entity can only be attached as modified without original state if it

5 //declares a version member or does not have an update check policy

6 dbContext.Attach(taskPlan,this.FindByID(taskPlan.PlanID));

7 //Cannot add an entity with a key that is already in use.

 
ネット上にも解決策がありますが、IsVersionフィールドを加えると、変な感じがします.