ここに私の問題が段階的にあり、
1-次のように、外部のjavascriptファイルからajax getリクエストを実行します。
$.ajax({
type: "GET",
dataType: 'json',
url: '/Company/GetCompanies',
error: function (xhr, status, error) {
alert('error');
return false;
},
success: function (response) {
alert('success');
return false;
}
});
2 - これは、リクエストを受け取るアクション メソッドです。
public ActionResult GetCompanies()
{
var model = new CompanyIndex();
model.FillCompanies();
return Json(model ,JsonRequestBehavior.AllowGet);
}
3 - CompanyIndex は、上記のアクション メソッドで作成された ViewModel です。
public class CompanyIndex
{
public IList<Company> Companies { get; set; }
public void FillCompanies()
{
/* Part that is not working */
UnitOfWork unitOfWork = new UnitOfWork();
Companies = unitOfWork.CompanyRepository
.Get(orderBy: q => q.OrderBy(u => u.CompanyName)).ToList();
unitOfWork.Dispose();
/****************************/
/* This works fine */
var companyList = unitOfWork.CompanyRepository
.Get(orderBy: q => q.OrderBy(u => u.CompanyName)).ToList();
Companies = companyList.Select(x => new { name = x.CompanyName }).ToList()
.Select(x => new Company
{
CompanyName = x.name
}).ToArray<Company>();
/********************/
}
}
ご覧のとおり、リポジトリと Get メソッドを使用して、データベースから企業エンティティをフェッチします。これも以下で共有します。問題は、データベースからそれらを取得するときです。取得されるモデルのタイプはSystem.Data.Entity.DynamicProxies.Company_someRandomStringHere
. この場合、Ajax get リクエストは成功せず、エラー メッセージが表示されます。
ただし、最初に db からフェッチし、ViewModel で Company オブジェクトを作成してリストに割り当てると、ajax は正常に動作し、ajax get リクエストは成功を返します。そして、ViewModel でオブジェクトを作成するときの Company エンティティのタイプはCompanyManagement.Models.Company
、あるべき姿です。
必要な場合に備えて、これは私が db からデータを取得するために使用している Get メソッドです。
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
query = query.Where(filter);
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
query = query.Include(includeProperty);
if (orderBy != null)
return orderBy(query).ToList();
else
return query.ToList();
}
新しい Company オブジェクトを手動で作成したくありません。どんなアイデアでも大歓迎です。前もって感謝します。