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