Tôi có một tình huống mà tôi muốn sử dụng một lớp logic nghiệp vụ duy nhất để thực hiện các hoạt động tương tự trên một loạt các lớp khung thực thể. Tôi đã định nghĩa một giao diện mà các lớp này thực hiện trong một tệp lớp một phần.LINQ to Entities thông qua thuộc tính giao diện
Tuy nhiên khi tôi cố gắng viết LINQ cho các truy vấn thực thể đối với các phương thức giao diện này, tôi nhận được NotSupportedException vì truy vấn không trực tiếp sử dụng thuộc tính của lớp mà thông qua giao diện.
Tôi muốn giữ nâng hạng nặng lên tầng cơ sở dữ liệu để có cách nào để đạt được điều này mà không cần sử dụng LINQ cho các đối tượng?
Dưới đây là một số mã chứng minh sự cố của tôi (nó đang sử dụng một lớp lưu trữ chung được tạo bởi một nhà máy).
public interface INamedEntity
{
int ID { get; set; }
string Name { get; set; }
}
// This is an Entity Framework class which has CustomerID and CustomerName properties.
public partial class Customer: INamedEntity
{
int INamedEntity.ID
{
get { return this.CustomerID; }
set { this.CustomerID = value; }
}
string INamedEntity.Name
{
get { return this.CustomerName; }
set { this.CustomerName = value; }
}
}
...
public string GetName<T>(int entityID) where T: EntityObject, INamedEntity
{
using(var repository = RepositoryFactory.CreateRepository<T>())
{
return repository
.Where(e => e.ID == entityID)
.Select(e.Name)
.Single();
}
}
Vâng, có vẻ như vấn đề. – gareththegeek