1

我有一种情况,我想急切地加载使用 LINQ-to-SQL 从数据库中检索到的用户的组织属性(因为我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

记录可能遇到此问题的其他人的修复程序。

LoadWith实际上通过查看数据模型类中的外键在数据库中是否可以为空来确定是否在 LINQ-to-SQL 创建的 SQL中使用 anINNER JOIN或 an 。OUTER LEFT JOIN如果它可以为空,则使用外连接。

    [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;
        }
    }

将一行更改为:

public? int OrganizationId { get; set; }

然后一切都按预期工作。

于 2013-02-05T02:21:06.153 回答