EF4代码优先:如何在不添加导航属性的情况下添加关系

我应该如何使用Code First而不使用任何导航属性来定义关系?

以前,我通过在关系的两端使用导航属性来定义“一对多”。并在数据库中创建适当的关系。这是类的外观的简化版本(为简单起见,我将“多对多”关系转换为“多对多”)。

public class User 

{

public string UserId { get; set; }

public string PasswordHash { get; set; }

public bool IsDisabled { get; set; }

public DateTime AccessExpiryDate { get; set; }

public bool MustChangePassword { get; set; }

public virtual Role Role { get; set; }

}

public class Role

{

public int RoleId { get; set; }

public string Name { get; set; }

public string Description { get; set; }

public virtual ICollection<User> Users { get; set; }

public virtual ICollection<Right> Rights { get; set; }

}

public class Right

{

public Guid RightId { get; set; }

public string Name { get; set; }

public string Description { get; set; }

public virtual Role Role { get; set; }

}

但是,如果删除导航属性,则不会创建任何关系。这是这些类的样子。

public class User 

{

public string UserId { get; set; }

public string PasswordHash { get; set; }

public bool IsDisabled { get; set; }

public DateTime AccessExpiryDate { get; set; }

public bool MustChangePassword { get; set; }

public int Role RoleId { get; set; }

}

public class Role

{

public int RoleId { get; set; }

public string Name { get; set; }

public string Description { get; set; }

}

public class Right

{

public Guid RightId { get; set; }

public string Name { get; set; }

public string Description { get; set; }

public int RoleId { get; set; }

}

请注意,我具有相关表的主键,而不是导航属性。一切都会在表上创建-关系除外。那么我该如何做呢?

顺便说一句,我已经尝试了dbcontext的OnModelCreating方法中的各种组合,但无济于事。任何帮助深表感谢!

谢谢,梅尔

回答:

我相信在使用代码优先时,您始终总是需要至少一侧的导航属性。然后您将能够映射它:

public class User  

{

public string UserId { get; set; }

public string PasswordHash { get; set; }

public bool IsDisabled { get; set; }

public DateTime AccessExpiryDate { get; set; }

public bool MustChangePassword { get; set; }

public int RoleId { get; set; }

public Role Role { get; set; }

}

public class Role

{

public int RoleId { get; set; }

public string Name { get; set; }

public string Description { get; set; }

}

public class Right

{

public Guid RightId { get; set; }

public string Name { get; set; }

public string Description { get; set; }

public int RoleId { get; set; }

public Role Role { get; set; }

}

public class TestContext : DbContext

{

public TestContext() : base("Entities")

{}

protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)

{

base.OnModelCreating(modelBuilder);

modelBuilder.Entity<User>()

.HasRequired(r => r.Role)

.WithMany()

.HasForeignKey(r => r.RoleId);

modelBuilder.Entity<Right>()

.HasRequired(r => r.Role)

.WithMany()

.HasForeignKey(r => r.RoleId);

}

}

以上是 EF4代码优先:如何在不添加导航属性的情况下添加关系 的全部内容, 来源链接: utcz.com/qa/401003.html

回到顶部