代码之家  ›  专栏  ›  技术社区  ›  Ali Ersöz

在实体框架中创建关系是否需要进行选择查询?

  •  0
  • Ali Ersöz  · 技术社区  · 17 年前

    我想创建一个博客对象,它与用户之间有一个关系。要创建关系,我必须先选择用户实体,然后将其设置为博客对象的用户属性吗?在实体框架中,示例建议将用户对象设置为ViewState,并在需要创建关系(如基本缓存)时检索它。

    这有必要吗?还有别的办法吗?(就像在linq to sql中,只设置外键而不选择。)

    这里是我的代码示例;

    Blog blog = new Blog
                {
                    Name = blogName,
                    Slogan = slogan,
                    User = Entities.Users.First(u => u.Id == userId)
                }
    
    Entities.AddToBlogs(blog);
    Entities.SaveChanges();
    

    编辑(给另一个提问的机会):有什么不清楚或其他的吗?

    2 回复  |  直到 17 年前
        1
  •  1
  •   madC    16 年前

    我们使用以下解决方案来设置外键,而无需从上下文中检索相应的实体。

    Blog blog = new Blog            
    {                
       Name = blogName,                
       Slogan = slogan,                
       UsersReference.EntityKey = new EntityKey("EntityModel.Users", "UserId", userId)            
    }
    
    Entities.AddToBlogs(blog);
    Entities.SaveChanges();
    
        2
  •  0
  •   Craig Stuntz    17 年前

    这在目前还没有得到官方的支持, but it may be included in a future version .

    不过,你或许可以绕过它。我还没有尝试过,但这个想法在概念上似乎是合理的:

    1. 创建一个新用户,并适当设置ID。将其附加到对象上下文。
    2. 告诉对象上下文忘记迄今为止所做的任何更改。
    3. 现在创建一个新博客,并将用户属性设置为您刚刚创建的用户。
    4. 保存对对象上下文的更改。

    显然,如果用户实际上不存在于数据库中,这将严重失败。

    似乎是个好主意,但似乎行不通(