私はMVC3アプリを再設計して、すべてのlinqをコントローラーから適切なレイヤーに移動しています。
これを構造SQL->EF->リポジトリ->サービス->コントローラーとして取得しました。インターフェイスを使用しています。
コンパイルすると、次のエラーが発生します。
gpc.data.service.roleServiceは、インターフェイスメンバーgpc.data.interfaces.iroleservice.HolderNamesbyRoleID(int)を実装していません。
私は適切なアーキテクチャにまったく慣れていないので、これがやみくもに明白な場合はお詫びします笑。ここにいくつかのコードがあります:
リポジトリ:
namespace gpc.Data.Repositories
{
public class roleRepository :gpc.Data.Interfaces.IRoleRepository
{
private gpc.Models.gpcEntities _entities = new Models.gpcEntities();
public HolderNames HolderNamesbyRoleID(int roleid)
{
return (from i in _entities.HolderNames
where i.roleid == roleid select i).FirstOrDefault();
}
}
}
次に、インターフェイスがあります。
namespace gpc.Data.Interfaces
{
public interface IRoleRepository
{
HolderNames HolderNamesbyRoleID(int roleid);
}
}
それから私はサービスを持っています:
namespace gpc.Data.Service
{
public class roleService : gpc.Data.Interfaces.IRoleService
{
private ModelStateDictionary _modelState;
private gpc.Data.Interfaces.IRoleRepository _repository;
public roleService(ModelStateDictionary modelState)
{
_modelState = modelState;
_repository = new gpc.Data.Repositories.roleRepository();
}
public roleService(ModelStateDictionary modelState,
gpc.Data.Repositories.roleRepository repository)
{
_modelState = modelState;
_repository = repository;
}
public HolderNames HolderNames(int roleid)
{
return _repository.HolderNamesbyRoleID(roleid);
}
}
}
次に、別のインターフェイスがあります。
namespace gpc.Data.Interfaces
{
public interface IRoleService
{
HolderNames HolderNamesbyRoleID(int roleid);
}
}
この構造で非常に単純な数え切れないほどのデータを作成し、予想どおりにコントローラーを介してビューにデータを取得することができました。これはすべてを選択してビューに投げるよりも少し複雑なので、何かを見逃したに違いないと思います。違いがあるかどうかはわかりませんが、「holdernames」はテーブルではなくSQLビューです。
どんな助けでも大歓迎