Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架4.1中的一对多关系:检索外部Id,但不检索对象本身_Entity Framework_Entity Framework 4.1 - Fatal编程技术网

Entity framework 实体框架4.1中的一对多关系:检索外部Id,但不检索对象本身

Entity framework 实体框架4.1中的一对多关系:检索外部Id,但不检索对象本身,entity-framework,entity-framework-4.1,Entity Framework,Entity Framework 4.1,我正在使用EntityFramework4.1并尝试创建一对多关系。在我的软件中,我有UserEntity和RoleEntity类。每个用户有一个角色,但一个角色可以有多个用户 到目前为止,除了相关的RoleEntity对象之外,我已经成功地将数据从数据库获取到UserEntity。我的测试用户对象的RoleId属性具有正确的RoleId,但Role属性为null 在使用正确的RoleEntity填充Role属性之前,是否需要编写其他配置 [Table("Roles")] public clas

我正在使用EntityFramework4.1并尝试创建一对多关系。在我的软件中,我有UserEntity和RoleEntity类。每个用户有一个角色,但一个角色可以有多个用户

到目前为止,除了相关的RoleEntity对象之外,我已经成功地将数据从数据库获取到UserEntity。我的测试用户对象的RoleId属性具有正确的RoleId,但Role属性为null

在使用正确的RoleEntity填充Role属性之前,是否需要编写其他配置

[Table("Roles")]
public class RoleEntity
{
    public long Id { get; set; }
    public string Name { get; set; }
}

[Table("Users")]
public class UserEntity
{
    public long Id { get; set; }
    public string Password { get; set; }
    public Int32 IsActive { get; set; }

    public string Username { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string LocalService { get; set; }

    [ForeignKey("RoleEntity")]
    public long RoleId { get; set; }

    public virtual RoleEntity Role { get; set; }
    public virtual ClientOrganizationEntity ClientOrganization { get; set; }
}

public class UserContext : DbContext
{
    #region Constructor

    public UserContext(DbConfigurationProvider dbConfigurationProvider)
        : base(dbConfigurationProvider.ConnectionString)
    {
        if (dbConfigurationProvider == null)
            throw new ArgumentNullException("dbConfigurationProvider");

        Configuration.ProxyCreationEnabled = false;
    }

    #endregion

    #region DbSets

    public DbSet<UserEntity> Users { get; set; }
    public DbSet<RoleEntity> Roles { get; set; }
    public DbSet<ClientOrganizationEntity> ClientOrganizations { get; set; }

    #endregion
}

我没有看到您已通过禁用构造函数中的代理创建

Configuration.ProxyCreationEnabled = false
禁用代理创建时,延迟加载将不起作用

因此,要么启用代理创建,要么使用
Include
方法加载导航属性

var user = _dbContext.Users.Include(u => u.Role).FirstOrDefault(x => x.Id == 1);

您需要启用延迟加载
Configuration.LazyLoadingEnabled=true
在你的
用户上下文中
构造函数。

我最终自己解决了这个问题。对于某些禁用Configuration.ProxyCreationEnabled的操作,中断了关系。我为修复它所做的唯一更改是删除此行:

Configuration.ProxyCreationEnabled = false;

当然,即使在禁用代理创建的情况下,也必须能够使用关系,所以如果有人有任何其他信息,我想听听。然而,就目前而言,我很高兴问题得到了解决。

不幸的是,这并没有解决问题。根据EF 4.1的文档(我做的实验只是为了验证文档是否正确),ForeignKey属性是在navigation属性上还是在ForeignKey属性上并不重要:表示在关系中用作外键的属性。注释可以放置在外键属性上并指定关联的导航属性名称,也可以放置在导航属性上并指定关联的外键名称。“维尔纠正了我的回答。起初我没有看到配置部分。不幸的是,这也没有解决问题。即使尝试访问角色,UserEntity的Role属性仍然为null。
Configuration.ProxyCreationEnabled = false;