2013-08-14 45 views
11

Tôi là người mới bắt đầu tại WPF. Tôi muốn biết rằng sự khác biệt giữa dbcontext.Adddbcontext.AddObject là gì.Sự khác nhau giữa dbcontext.Add và dbcontext.AddObject

private void AddButton_Click(object sender, RoutedEventArgs e) 
{ 
     Name employee = new Name(); 
     employee.Name1 = "Test"; 
     dataContext.Names.AddObject(employee); 
} 

Tôi muốn đạt được điều này dbcontext.AddObject(). Nhưng tôi gặp lỗi:

'System.Data.Entity.DbSet' does not contain a definition for 'AddObject' and no extension method 'AddObject' accepting a first argument of type 'System.Data.Entity.DbSet' could be found (are you missing a using directive or an assembly reference?) C:\Documents\Visual Studio 2012\Projects\WpfApplication9\WpfApplication9\MainWindow.xaml.cs 49 31 WpfApplication9`

Cũng đề xuất cái nào tốt hơn. Cảm ơn bạn.

+1

Điều này không liên quan gì đến WPF.Nó liên quan đến Entity Framework. – shahkalpesh

Trả lời

14

Thực ra bạn đang nói về phương pháp AddObject của ObjectSet<TEntity> lớp đã được sử dụng bởi cũ ObjectContext. Nhưng kể từ khi Entity Framework 4 chúng tôi có DbContext lớp (mà là một wrapper trên cũ ObjectContext). Lớp học mới này sử dụng DbSet<TEntity> thay vì cũ ObjectSet<TEntity>. Lớp thiết lập mới có phương thức Add.

Vì vậy, hãy quay lại sự khác biệt. Cũ thực hiện gọi AddObject phương pháp ObjectContext:

public void AddObject(TEntity entity) 
{ 
    Context.AddObject(FullyQualifiedEntitySetName, entity); 
} 

thực hiện mới không điều tương tự (xem thông số hành động):

public virtual void Add(object entity) 
{ 
    ActOnSet(() => ((InternalSet<TEntity>) this).InternalContext.ObjectContext.AddObject(((InternalSet<TEntity>) this).EntitySetName, entity), 
       EntityState.Added, entity, "Add"); 
} 

Như bạn có thể nhìn thấy cùng một phương pháp ObjectContext.AddObject được gọi trong nội bộ. Những gì đã thay đổi - thực thể trước đây chúng ta chỉ cần thêm vào bối cảnh, nhưng bây giờ nếu có nhập trạng thái tồn tại trong ObjectStateManager, thì chúng ta chỉ cần thay đổi tình trạng nhập cảnh vào Added:

if (InternalContext.ObjectContext.ObjectStateManager.TryGetObjectStateEntry(entity, out entry)) 
{ 
    entry.ChangeState(newState); // just change state 
} 
else 
{ 
    action(); // invoke ObjectContext.AddObject 
} 

mục tiêu chính của API mới được làm DbContext dễ dàng hơn để sử dụng.

+0

Xin lưu ý rằng các vấn đề mà OP có là kết quả của việc gọi AddObject trên DbSet và không phải trong ngữ cảnh. Có lẽ bạn có thể xây dựng câu trả lời của bạn bằng cách hiển thị cách sử dụng cả hai, bằng cách gọi ObjectContext.AddObject ("Names", nameEntityToAdd) và DbContext.Names.Add (nameEntityToAdd) – zeebonk

1

Gọi AddObject trên ObjectContext để thêm đối tượng vào ngữ cảnh đối tượng.

Làm điều này khi đối tượng là đối tượng mới chưa tồn tại trong nguồn dữ liệu.

Khi bạn tạo đối tượng mới liên quan đến đối tượng khác trong ngữ cảnh đối tượng, hãy thêm đối tượng bằng cách sử dụng một trong các phương pháp sau: Gọi phương thức Thêm trên EntityCollection và chỉ định đối tượng liên quan.

0

Ngắn gọn dường như chúng gần giống nhau. Tôi thấy bài blog này kinda ngắn và đến điểm:

http://blog.cincura.net/232485-someentityset-addobject-vs-addtosomeentityset-methods/

Bạn cũng có thể có một cái nhìn tại MSDN, nhưng trong trường hợp đặc biệt này, tôi thấy nó là một chút khó hiểu.

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.addobject.aspx

Lỗi của bạn cho biết phương thức không khả dụng. Tôi thấy điều này xảy ra khi bạn chuyển sang phiên bản mới của Khung thực thể. Bạn sẽ cần phải trải qua và thay đổi tất cả các cuộc gọi Phương thức của bạn cho chúng tôi Add

Nếu có một số lý do chính khiến bạn muốn sử dụng AddObject, sau đó giải thích chi tiết hơn nhu cầu của bạn ở đây để ai đó có thể trợ giúp bạn tốt hơn .

Các vấn đề liên quan