【发布时间】:2016-01-28 05:45:43
【问题描述】:
我正在尝试构建具有一对多关系的代码优先数据模型。
有一个 UserDTO 和一个 RoleDTO 模型,其中 User 包含一对多角色。
RoleDTO 的一些简化代码是:
internal class RoleDTO
{
public UserDTO User { get; set; }
public string Value { get; set; }
public RoleDTO()
{
}
}
还有简化的 UserDTO:
internal class UserDTO
{
public string Email { get; set; }
public string FullName { get; set; }
public string UserName { get; set; }
public virtual ICollection<RoleDTO> Roles { get; set; }
public UserDTO()
{
}
}
最后是继承自 DBContext 的类
class StorageContext : DbContext
{
public DbSet<UserDTO> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"My_Connection_String");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserDTO>().HasKey(entity => entity.Email);
modelBuilder.Entity<UserDTO>().HasMany(entity => entity.Roles);
modelBuilder.Entity<RoleDTO>().HasOne<UserDTO>().WithMany(x => x.Roles);
modelBuilder.Entity<RoleDTO>().HasKey(x => x.Value);
}
}
当我运行我的添加迁移并且我没有数据库或迁移文件夹(即使我在有一些列之后运行它)时,会创建角色表,其中包含引用用户电子邮件地址的额外列。
我只想要我的角色表中的 2 列,一个是用户的电子邮件地址,并且是用户电子邮件 PK 的 FK,另一个是与外键组合的字符串值,在用户表。下图:
******************************* * 角色 * ******************************* * User_Email - 字符串/varchar * * 值 - 字符串 /varchar * ******************************* FK - User_Email 到用户表电子邮件列 PK - User_Email,值复合主键有谁知道如何使用 fluent API 或数据注释来实现这一点?
谢谢!
【问题讨论】:
-
现在称为 EF Core,不妨更改标题以反映它
标签: c# one-to-many entity-framework-core