【问题标题】:How do I save an object that contains and EntitySet?如何保存包含 EntitySet 的对象?
【发布时间】:2010-03-31 01:15:57
【问题描述】:

假设我有一个用户(映射到用户表)并且编辑视图(在 MVC 中)显示用户可以访问的模块的多选列表(映射到模块表),模块根据用户的预选模块的实体集。

我已尝试保存用户,然后手动删除所有 User_Modules 并根据提交时选择的内容重新添加它们,但用户的 User.User_Modules 的 EntitySet 为空。

我无法在网上找到处理这种情况的正确方法。有人可以帮忙吗?

编辑:添加我的 EntitySet 代码

private EntitySet<UserModule> _UserModules;
    [Association(Storage = "_UserModules", ThisKey="UserId", OtherKey = "UserId")]
    public EntitySet<UserModule> UserModules
    {
        get { return this._UserModules; }
        set { this._UserModules.Assign(value); }
    }

【问题讨论】:

    标签: linq linq-to-sql


    【解决方案1】:

    尝试检查是否先加载集合

    Linq to SQL

    DataLoadOptions options = new DataLoadOptions();    
    options.LoadWith<User>(c => c.User_Modules);
    context.LoadOptions = options;
    
    //Do query and then see if your EntitySet is still null.
    

    Linq 到实体的方式...

    if(!User.User_ModulesReference.IsLoaded){
         User.User_ModulesReference.Load();
     }
     //Insert delete logic here...
    

    【讨论】:

    • 我的实体集从不提供任何函数/属性,例如 IsLoaded 或 Load。 IE。在 User.User_Modules 之后添加句号在智能感知中没有提供任何内容,并且添加 .Load() 例如不会构建。这不是预期的行为吗?我使用 MSDN 中的语法构建了 EntitySet,并仔细检查了另一个教程。我可以确认 EntitySet 确实包含一组我可以查询的 UserModules。
    • 你把它们加到两边了吗?即关系和上下文?
    • 我没有为 DataLoadOptions 突出显示上下文,也没有提示添加引用。我已经编辑了我的 OP 以在与 User 表关联的类上显示我的 EntitySet 代码,以防我完全错误地做或解释它。
    猜你喜欢
    • 1970-01-01
    • 2016-04-12
    • 2017-12-16
    • 2017-05-14
    • 2012-01-18
    • 1970-01-01
    • 2014-05-30
    • 2013-06-09
    • 2014-10-03
    相关资源
    最近更新 更多