【发布时间】:2015-08-17 03:08:31
【问题描述】:
我在使用 EF 时遇到问题。我有以下情况:
表用户:用户名、密码、RoleId、IsActive、CreatedDate、ActivedDate
表管理员:用户名、名称
餐桌人员:用户名、姓名、职位、电话
从这个数据库模式中,我想通过合并表数据来生成以下实体:
public class User
{
[Key]
public string Username { get; set; }
public string Password { get; set; }
public int RoleId { get; set; }
public bool IsActive { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ActivedDate { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public string Position { get; set; }
[ForeignKey("RoleId")]
public Role Role { get; set; }
}
配置类:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.Map(map =>
{
map.Properties(p => new
{
p.Username,
p.Password,
p.RoleId,
p.IsActive,
p.CreatedDate,
p.ActivedDate
});
map.ToTable("User");
})
.Map(map =>
{
map.Properties(p => new
{
p.Username,
p.Name
});
map.ToTable("Admin");
}).Map(map =>
{
map.Properties(p => new
{
p.Username,
p.Name,
p.Phone,
p.Position
});
map.ToTable("Staff");
});
base.OnModelCreating(modelBuilder);
}
我已经对其进行了测试,但它没有按预期工作。我总是收到这条消息:
“用户”类型的属性只能映射一次。非键属性“名称”被多次映射。确保 Properties 方法只指定每个非键属性一次。
我错过了什么吗?
【问题讨论】:
-
也许有人有一个实际的解决方案 - 但我认为您将不得不走与
Role相同的道路(外键,...) -
用户是否继承了用户类的用户?或者您的代码对于所有这些实体是否只有一个用户?你可以在这里查找继承策略:blogs.msdn.com/b/alexj/archive/2009/04/15/… 我看到你有一个角色实体,我不认为我会如何解决它......我会有一个基础 Person,让 User、Admin 和 Staff 继承从那个抽象类。然后我会使用每个类型的表 (TPT) 来避免我的数据库中出现多个空值。
标签: c# entity-framework