2012-02-17 90 views
5

Tôi mới tham gia Khung thực thể và tôi nghĩ có điều gì đó mà tôi hiểu nhầm ở đây. Tôi đang cố gắng chèn một hàng vào một bảng và ở khắp mọi nơi tôi tìm thấy mã ví dụ, họ gọi phương thức InsertOnSubmit(), nhưng vấn đề là tôi không thể tìm thấy ở bất kỳ đâu phương thức InsertOnSubmit hoặc SubmitChanges.Không thể tìm thấy phương thức InsertOnSubmit()

Các lỗi cho tôi biết: System.Data.Object.ObjectSet không chứa các định nghĩa cho InsertOnSubmit, ...

Những gì tôi đang làm vậy ??

http://msdn.microsoft.com/en-us/library/bb763516.aspx

 GMR_DEVEntities CTX; 
     CTX = new GMR_DEVEntities(); 
     tblConfig Config = new tblConfig { ID = Guid.NewGuid(), Code = "new config code" }; 
     CTX.tblConfigs.InsertOnSubmit(Config); // Error here 

Edit: Sử dụng Visual Studio 2010 trên FW 4.0

+0

Bạn đang sử dụng EF chứ không phải LINQ to SQL. – SLaks

+1

Bạn đang trộn lên linq-to-sql và [Entity Framework] (http://msdn.microsoft.com/en-us/library/bb738695.aspx). Bạn sử dụng sau này. –

+0

Oups Của tôi xấu, tôi sẽ sửa chữa các bài viết – Hugo

Trả lời

14

InsertOnSubmit là một phương pháp LINQ-to-SQL và không có trong khung Entity.

Tuy nhiên, kể từ khi dự án của chúng tôi là một sự chuyển đổi từ LINQ-to-SQL mà chúng ta có một số phương pháp khuyến nông có thể giúp:

public static class ObjectContextExtensions 
{ 
    public static void SubmitChanges(this ObjectContext context) 
    { 
     context.SaveChanges(); 
    } 

    public static void InsertOnSubmit<T>(this ObjectQuery<T> table, T entity) 
    { 
     table.Context.AddObject(GetEntitySetName(table.Context, entity.GetType()), entity); 
    } 

    public static void InsertAllOnSubmit<T>(this ObjectQuery<T> table, IEnumerable<T> entities) 
    { 
     var entitySetName = GetEntitySetName(table.Context, typeof(T)); 
     foreach (var entity in entities) 
     { 
      table.Context.AddObject(entitySetName, entity); 
     } 
    } 

    public static void DeleteAllOnSubmit<T>(this ObjectQuery<T> table, IEnumerable<T> entities) where T : EntityObject, new() 
    { 
     var entitiesList = entities.ToList(); 
     foreach (var entity in entitiesList) 
     { 
      if (null == entity.EntityKey) 
      { 
       SetEntityKey(table.Context, entity); 
      } 

      var toDelete = (T)table.Context.GetObjectByKey(entity.EntityKey); 
      if (null != toDelete) 
      { 
       table.Context.DeleteObject(toDelete); 
      } 
     } 
    } 

    public static void SetEntityKey<TEntity>(this ObjectContext context, TEntity entity) where TEntity : EntityObject, new() 
    { 
     entity.EntityKey = context.CreateEntityKey(GetEntitySetName(context, entity.GetType()), entity); 
    } 

    public static string GetEntitySetName(this ObjectContext context, Type entityType) 
    { 
     return EntityHelper.GetEntitySetName(entityType, context); 
    } 
} 

đâu EntityHelper is as per the MyExtensions mã nguồn mở library.

+0

Cuối cùng tìm thấy những gì đã sai, cơ sở dữ liệu thực thể của tôi là một tệp dbmx chứ không phải tệp dbml. Tôi không hiểu tại sao điều này .. nhưng miễn là nó hoạt động. (Cần mua một cuốn sách mới mà tôi đoán) – Hugo

+0

Đây có phải là những phương pháp duy nhất có đặc tính linq-to-sql hoặc có những phương thức khác không hoạt động khi di chuyển đến EF không? – frenchie

+0

@frenchie - Điều này có lẽ không đầy đủ, nhưng nó đã giải quyết được phần lớn các vấn đề của chúng tôi. – Reddog

1

Cuối cùng tìm thấy điều gì sai, cơ sở dữ liệu Thực thể của tôi là tệp dbmx chứ không phải tệp dbml. Tôi không hiểu tại sao điều này .. nhưng miễn là nó hoạt động. (Cần mua một cuốn sách mới, tôi đoán) - Hugo 17 tháng 2 lúc 19:40

0

tôi cũng đã cùng một vấn đề Chúng tôi có thể chèn bằng cách sử dụng Add

GMR_DEVEntities CTX; 
    CTX = new GMR_DEVEntities(); 
    tblConfig Config = new tblConfig { ID = Guid.NewGuid(), Code = "new config code" }; 
    CTX.tblConfigs.Add(Config); 
1

Xin chào này làm việc cho tôi

Entity db = new Entity(); 

TABLE_NAME table = new TABLE_NAME 
        { 
         COLUMN1 = "TEST", 
         cOLUMN2 = "test" 
         //etc... 
        }; 

        db.TABLE_NAME.Add(table); 
        db.SaveChanges(); 
Các vấn đề liên quan