目標: SQL ビューから asp.net ページの ListView にデータを表示する 新しいビューを持つ新しいデータベースがあり、それを指す必要があります
エラー:
System.Reflection.TargetInvocationException: '呼び出しのターゲットによって例外がスローされました。' 内部例外 NotSupportedException: 指定された型メンバー 'Alternate_ID' は、LINQ to Entities ではサポートされていません。初期化子、エンティティ メンバー、およびエンティティ ナビゲーション プロパティのみがサポートされています。
System.InvalidOperationException: 'DataBoundControl でページングが有効になっている場合、SelectMethod は IQueryable を返すか、次のすべての必須パラメーターを持つ必要があります: int startRowIndex、int maximumRows、out int totalRowCount'
試してみました: リストビュー、ドキュメント、アイテムタイプ、データ バインディングなどのチュートリアルを調べました。初期化子、エンティティ メンバー、およびエンティティ ナビゲーション プロパティのみがサポート されています。モデル、ビュー、スペル チェック、デザイナー ファイル、pocos などを調べました。
コード:
default.aspx :
<asp:ListView id="lstClaims" runat="server" ItemType="Placeholder.Data.vx_EligibilitySearch" SelectMethod="lstMembers_GetData" OnItemCommand="lstMembers_ItemCommand"
ItemPlaceholderID="litPlaceHolder">
<LayoutTemplate>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th></th>
<th><asp:LinkButton id="Sort_Claim_Number" runat="server" CommandArgument="Group_Description" CommandName="Sort">Group</asp:LinkButton></th>
<th><asp:LinkButton id="Sort_Claim_Status" runat="server" CommandArgument="Group_ID" CommandName="Sort">Group ID</asp:LinkButton></th>
<th><asp:LinkButton id="Sort_Plan" runat="server" CommandArgument="Alternate_ID" CommandName="Sort">Member ID</asp:LinkButton></th>
</thead>
<asp:Literal ID="litPlaceHolder" runat="server" />
</table>
</div>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%# Item.Group_Description %></td>
<td><%# Item.Group_ID %></td>
<td><%# Item.Alternate_ID %></td>
</tr>
</ItemTemplate>
</asp:ListView>
注: protected global::System.Web.UI.WebControls.ListView lstClaims; default.aspx.designer.cs にあります
これは [ lstClaims.DataBind(); を指します。] :
if (memberIDIsValid || memberIsValid)
{
ShouldSearch = true;
lstClaims.DataBind();
}
これはメソッド内にあります: lnkSearch_Click は、ここの aspx ページから呼び出されます ([検索] ボタンをクリックしたとき):
<p><asp:LinkButton ID="lnkSearch" runat="server" OnClick="lnkSearch_Click" CssClass="btn btn-default"><i class="fa fa-search"></i> Search Members</asp:LinkButton></p>
データを取得する方法:
public IQueryable<vx_EligibilitySearch> lstMembers_GetData()
{
litNumSearchResults.Text = "";
// IQueryable<Member> members = null;
IQueryable<vx_EligibilitySearch> members = null;
try
{
if (!ShouldSearch)
return members;
panelSearchForm.Visible = false;
lnkButtonBackToSearch.Visible = true;
members = GetDataFromQuery();
public IQueryable<vx_EligibilitySearch> GetDataFromQuery()
{
// IQueryable<Member> members = null;
IQueryable<vx_EligibilitySearch> members = null;
try
{
// members = somedb.Members.AsNoTracking().AsQueryable(); //.OrderBy(a => a.Claim_Number)
members = somedb.vx_EligibilitySearch.AsNoTracking().AsQueryable(); //.OrderBy(a => a.Claim_Number)
if (!string.IsNullOrEmpty(Search_MemberID))
// members = members.Where(m => m.Subscriber_ID == Search_MemberID).AsQueryable();
members = members.Where(m => m.Alternate_ID == Search_MemberID).AsQueryable();
部分クラス vx_EligibilitySearch には次のものがあります。
public string Alternate_ID { get; set; }
もっと:
namespace Placeholder.Data
{
using System;
using System.Collections.Generic;
public partial class vx_EligibilitySearch
{
public string Subscriber_ID { get; set; }
public string Group_Description { get; set; }
public string Group_ID { get; set; }
public string Alternate_ID { get; set; }
public string Member_Name { get; set; }
public string Sex { get; set; }
public Nullable<System.DateTime> Birth_Date { get; set; }
DbContext :
members = somedb.vx_EligibilitySearch.AsNoTracking().AsQueryable(); //.OrderBy(a => a.Claim_Number)
somedb の定義に移動すると、次の BasePage.cs に移動します。
protected VBADemoEntities somedb = new VBADemoEntities();
VBADemoEntities の定義に移動すると:
namespace Placeholder.Data
public partial class VBADemoEntities : DbContext
{
public VBADemoEntities()
: base("name=VBADemoEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Auth> Auths { get; set; }
...........
public virtual DbSet<Member> Members { get; set; }
public virtual DbSet<vx_EligibilitySearch> vx_EligibilitySearch { get; set; }