1

LINQ-to-SQLを使用してDBから取得するユーザーの組織プロパティを熱心にロードしたい状況があります(usingコンテキストの接続が閉じているため、後でプロパティを取得しようとして失敗するため)。問題は、ユーザーが組織を持っていない場合があることです。その場合はをFetchUserByName返しますnull。私が欲しいものではありません。これを私が望むように機能させる方法はありますか?それは、関連付けられた組織があるかどうかに関係なく、ユーザーのインスタンスを返すことです。

    private static void EagerLoad(DataContext ctx)
    {
        var loadOpt = new DataLoadOptions();
        loadOpt.LoadWith<User>(u => u.Organization);
        ctx.LoadOptions = loadOpt;
    }

    public User FetchUserByName(string username)
    {
        User user = null;
        using (var ctx = contextManager.GetSingleDataContext())
        {
            EagerLoad(ctx);
            user = ctx.GetTable<User>().SingleOrDefault(u => u.UserName == username && u.IsActive);
        }

        return user;
    }
4

1 に答える 1

1

これに遭遇する可能性のある他の人のために、修正が何であったかを文書化します。

LoadWithLINQ-to-SQL によって作成された SQL でanINNER JOINまたは anを使用するかどうかを実際に決定するには、データ モデル クラスの外部キーがデータベースで null 許容かどうかを調べます。OUTER LEFT JOINnull 許容の場合は、外部結合を使用します。

    [Column]
    public int OrganizationId { get; set; } /*** Here is The Problem ***/

    private EntityRef<Organization> _organization;

    [Association(OtherKey = "OrganizationId", Storage = "_organization", ThisKey = "OrganizationId", IsForeignKey = true)]
    public Organization Organization
    {
        get
        {
            return this._organization.Entity;
        }
    }

1 行を次のように変更しました。

public? int OrganizationId { get; set; }

そして、すべてが期待どおりに機能しました。

于 2013-02-05T02:21:06.153 に答える