簡體   English   中英

有沒有辦法通過 DbSet<T> 進入頁面?

[英]Is there a way to pass the DbSet<T> into the page?

我有頁面的窗口。 該頁面顯示來自我的數據庫的數據。 此外,在窗口上放置按鈕,其內容根據數據庫的表名稱。 這些按鈕切換頁面的內容。

例如,這是btnUsers按鈕的點擊事件,它顯示“用戶”表:

void btnUsers_Click(object sender, RoutedEventArgs e) {
    this.FrameMain.Navigate(new pageTable(Context.ctx.Users, ...));
}

pageTable是我的“通用”頁面,它接收Users類。 這是它的構造函數,它不起作用:

public pageTable(dynamic table, ...) {
    InitializeComponent();

    TableTemplate<dynamic>.Init(table, ...);
}

這是我的通用類,它在DbSet<T>

static class TableTemplate<T> {
    internal static void Init(T table) {
        foreach (string f in Foo(table, ...) {
            ...
        }
    }
}

Foo方法只是從DbSet<T>表中提取列:

internal static string Foo<T>(T item, ...) {
    ...
}

關鍵是,當我嘗試從表中獲取數據時,應用程序終止,在按鈕的事件中,使用了這種通用方法。

我注意到,在Foo方法中,在調試期間, T類型是不同的,具體取決於我傳遞DbSet<T>

  • 如果我顯式初始化一個新的類實例(用於測試):

     static class TableTemplate<T> { internal static void Init(T table) { foreach (string f in Foo(new Users(), ...) { ... } } }

    ,那么T類型為System.Data.Entity.DynamicProxies.Users_E006B3...Foo方法有效;

  • 如果沒有顯式初始化, T類型是System.Data.Entity.DbSet`1[Namespace.Users] ,並且Foo方法不起作用。

是否有可能將通用實體類傳遞到頁面中? 我不知道 XAML 是否有通用類支持,以使用通用pageTable<T>頁面。 這可能是一個解決方案,但我想有一種更簡潔的方法來傳遞實體。

我找到了解決方案,它不使用通用頁面。

好吧,當我嘗試打印table內容時,我發現將結構化查詢傳遞給TableTemplate.Init() 我記得,以前從未使用dbContext.TableClass作為函數參數,總是將TableClass轉換為列表。

我承認,我不了解 EntityFramework 並且沒想到會出現這樣的結果。 一般我用的是object類型,已經忘記為什么用dynamic類型了...

我決定將轉換為列表的DbSet<T>傳遞給頁面的構造函數,而不是DbSet<T> 但是,因為我不使用常規頁面,所以我將此列表的項目轉換為object

void btnUsers_Click(object sender, RoutedEventArgs e) {
    this.FrameMain.Navigate(new pageTable(Context.ctx.Users.ToList<object>()));
}

現在, pageTable頁面的構造函數是下一個:

public pageTable(List<object> table) {
    InitializeComponent();

    TableTemplate<object>.Init(table, ...);
}

並且,接下來是TableTemplate類的Init方法:

internal static void Init(List<T> tableList) {
    if (tableList.Count > 0) {
        foreach (string f in Foo(tableList[0], ...) {
            ...
        }
    }
}

如果tableList為空,我還沒有弄清楚如何只顯示表的列名。 因此,在這種情況下,現在頁面顯示沒有列名稱的空DataGrid 盡管如此,我很高興,這可以做到我想要的。

最后,我要說,間接同意Xerillio 的觀點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM