Hãy xem xét một miền nơi Khách hàng, Công ty, Nhân viên, v.v., có thuộc tính ContactInfo, lần lượt chứa một tập hợp Địa chỉ, Điện thoại, Email, v.v. , vv ...Entity Framework chỉ đọc các bộ sưu tập
đây là ContactInfo tôi viết tắt:
public class ContactInfo : Entity<int>
{
public ContactInfo()
{
Addresses = new HashSet<Address>();
}
public virtual ISet<Address> Addresses { get ; private set; }
public Address PrimaryAddress
{
get { return Addresses.FirstOrDefault(a => a.IsPrimary); }
}
public bool AddAddress(Address address)
{
// insure there is only one primary address in collection
if (address.IsPrimary)
{
if (PrimaryAddress != null)
{
PrimaryAddress.IsPrimary = false;
}
}
else
{
// make sure the only address in collection is primary
if (!Addresses.Any())
{
address.IsPrimary = true;
}
}
return Addresses.Add(address);
}
}
Một số lưu ý (tôi không chắc chắn 100% nếu đây là những EF "thực hành tốt nhất"):
- thu Địa chỉ (es) là ảo để cho phép tải chậm
- setter tin về thu cấm thay thế bộ sưu tập
- bộ sưu tập là một
ISet
để đảm bảo rằng không có địa chỉ trùng lặp mỗi xúc - sử dụng
AddAddress
phương pháp tôi có thể đảm bảo rằng luôn luôn và ở hầu hết có 1 địa chỉ đó là chính ... .
tôi muốn (nếu có thể) để ngăn chặn việc thêm địa chỉ qua ContactInfo.Addresses.Add()
phương pháp và buộc sử dụng của ContactInfo.AddAddress(Address address)
...
tôi đang nghĩ đến phơi bày bộ địa chỉ qua ReadOnlyCollection
nhưng điều này có hoạt động với Entity Framework (v5) không?
Tôi sẽ làm như thế nào?
Không nên đưa IEnumerable đến một ISet và làm tất cả các phép thuật cần được ẩn sau đó? –
@Michael Thật không may, đây không phải là một lựa chọn cho tôi ... Tôi cần để có thể truy vấn ... – zam6ak
Nó không hoạt động trong mã đầu tiên. EF không tạo bất kỳ bảng nào cho bộ sưu tập/bộ sưu tập được bảo vệ. – 101V