2011-07-14 17 views
6

thể trùng lặp:
EF4 Cast DynamicProxies to underlying objectC# Clone System.Data.Entity.DynamicProxies vào lớp thực tế (không được ủy quyền)?

Tôi đang cố gắng tìm ra cách để sao chép hoặc chuyển đổi một System.Data.Entity.DynamicProxies vào đó là lớp học thực tế. Ví dụ:

System.Data.Entity.DynamicProxies.Currency_F4008E27DE_etc is the proxy class 
MyApp.Entities.Currency is the real class 

Tất cả các lớp học trong MyApp.Entities kế thừa từ BaseEntity, vì vậy tôi đã cố gắng để làm chuyển đổi đó:

public abstract partial class BaseEntity 
{ 
    public T ShallowCopy<T>() where T : BaseEntity 
    { 
     return this.MemberwiseClone() as T; 
    } 
    // other BaseEntity properties not relevent here 
} 

Và sau đó chuyển đổi DynamicProxies vào lớp thực:

// this returns a DynamicProxies class 
Currency currency = LookupDefaultCurrency(); 
// this one needs to return a Entities.Currency class 
// (but currently returns a DynamicProxies class too 
Currency pocoCurrency = (Currency)currency.ShallowCopy<Currency>(); 
HttpRuntime.Cache[key] = pocoCurrency; 

Lý do cho điều này là tôi muốn xóa tất cả theo dõi khung thực thể và vv khỏi đối tượng này và chỉ lưu trữ các thuộc tính thuần túy (POCO) trong bộ nhớ cache. Và tôi sẽ cần để có thể làm điều này cho tất cả 100 hoặc hơn các lớp Entity, do đó, nó phải được hợp lý chung chung - mà không cần nói một cách thủ công object1.foo = object2.foo cho mỗi thuộc tính duy nhất.

+0

Tại sao bạn không tắt tạo proxy như bạn đã hỏi trong câu hỏi trước? –

+0

Hóa ra đó không phải là những gì tôi cần. Tôi cần chúng để được proxy (với tất cả các theo dõi vv) cho hầu hết thời gian. Nhưng khi bộ nhớ đệm cho sau này chỉ đọc sử dụng nó cần phải là một đối tượng không proxy xem http://stackoverflow.com/questions/6688772/c-entity-framework-using-only-one-objectcontext-per-httpcontext –

+0

Bạn có thể bật tắt proxy tạo chọn lọc cho một số trường hợp ngữ cảnh hoặc thậm chí truy vấn để Imho bạn nên được tốt với việc tắt proxy chỉ để tải tiền tệ của bạn. –

Trả lời

1

Có thể this article là hữu ích. Nó thảo luận về một số phương pháp để nhân bản dữ liệu. Tôi không chắc chắn nếu các phương pháp này có thể được sử dụng để chuyển đổi một đối tượng của loại A đến một đối tượng của loại B. Nhưng nó chắc chắn là giá trị một thử.

Tôi sẽ rất quan tâm đến kết quả này, vì this NuGet package cũng sử dụng mẫu lưu trữ chung và được ghi nhớ để giải quyết cùng một kỹ thuật lưu trữ và vấn đề của bạn dường như giống nhau khi có dữ liệu deserializing.

+1

@JK Bạn có thể cung cấp phương pháp nào làm cho nó hoạt động cho bạn hay không, tôi rất quan tâm, vì tôi có cùng một vấn đề trong dự án của mình. – erikvda