2010-08-26 27 views
5

Tôi muốn sử dụng bộ sưu tập tải chậm trên mô hình, nhưng tôi muốn chức năng Add/Remove được thực hiện thông qua các phương pháp riêng biệt. Vì vậy, một cái gì đó như thế này:Khuôn khổ thực thể Mã CTP4 Đầu tiên: Lập bản đồ các thuộc tính được bảo vệ

class Model 
{ 
    protected virtual ICollection<Something> _somethings { get; set; } 

    public IEnumerable<Something> Somethings 
    { 
    get { return _somethings; } 
    } 

    public void AddSomething(Something thingToAdd) 
    { 
    /* logic */ 
    _somethings.Add(thingToAdd); 
    } 
} 

Tôi không thể tìm ra cách định cấu hình ánh xạ cho việc này. Tôi đã xem xét sử dụng một lớp cấu hình: EntityConfiguration. Nhưng kể từ khi tài sản được bảo vệ tôi không thể tìm ra cách để thiết lập một cấu hình trên đó. Có cách nào để hoàn thành những gì tôi đang cố gắng làm ở đây không?

+0

Would một cái gì đó giống như một tác phẩm Kho? –

+0

Tôi đoán bạn có vấn đề tương tự như tôi: http://stackoverflow.com/questions/3574333/ef-4-0-mapping-to-readonly-property-with-private-field –

Trả lời

0

Tôi giả sử nếu bạn khai báo lớp cấu hình (kế thừa EntityConfiguration) bên trong lớp Mô hình của bạn, nó có thể hoạt động. Nó không phải là một giải pháp tốt đẹp, vì phân lớp thường không được khuyến khích, nhưng đó là điều duy nhất tôi có thể nghĩ đến.

0

Tôi đã nghe điều này chỉ có thể được thực hiện bằng cách sử dụng cách thức tệp EDMX .. không phải mã đầu tiên.

1

Bạn có thể sử dụng biểu readonly tĩnh để truy cập vào tài sản được bảo vệ như thế này

protected virtual ICollection<Something> _somesing { get; set; } 
public static readonly Expression<Func<Model, ICollection<Something>>> Expression = p => p._something; 

public IReadOnlyCollection<Something> Something 
{ 
    return _sumething.AsReadOnly(); 
} 

Và sử dụng nó trong phương pháp OnModelCreating trong lớp DbContext cho bất động sản lập bản đồ bảo vệ

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model>().HasMany<Something>(Model.Expression); 
} 
Các vấn đề liên quan