我在使用EF时遇到了问题。我有以下情况:
表用户:用户名,密码,RoleId,IsActive,CreatedDate,ActivedDate
表格管理员:用户名,姓名
表员工:用户名,姓名,职位,电话
从这个数据库模式我想通过合并表数据生成以下实体:
function get_select_option($table,$id,$name,$selected=0){
$this->db->where('column_name','your_value');
$query = $this->db->get($table);
$select = '<option value="">SELECT</option>';
if($query->num_rows()>0){
foreach($query->result_array() as $row){
$selected_option = ($selected==$row[$id]) ? ' selected="selected" ':' ';
$select.='<option value="'.$row[$id].'" '. $selected_option.'>'.trim(strtoupper($row[$name])).'</option>';
}
}
return $select;
}
配置类:
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; }
}
我已经测试了它,但它没有按预期工作。我总是得到这样的信息:
“用户”类型的属性只能映射一次。非键属性“名称”不止映射一次。确保Properties方法仅指定每个非键属性一次。
我错过了什么吗?
答案 0 :(得分:0)
问题在于Name
和Admin
中的两个Staff
当然不能同时映射到Name
中的一个User
属性。
但是您可以拥有两个不同的名称属性,并将两个表映射到两个表中的相同列名:
User
的变化:
public class User
{
[Key]
public string Username { get; set; }
...
public string AdminName { get; set; }
public string StaffName { get; set; }
...
}
映射片段:
.Map(map =>
{
map.Properties(p => new
{
p.Username,
p.AdminName
});
map.Property(p => p.AdminName).HasColumnName("Name");
map.ToTable("Admin");
}).Map(map =>
{
map.Properties(p => new
{
p.Username,
p.StaffName,
p.Phone,
p.Position
});
map.Property(p => p.StaffName).HasColumnName("Name");
map.ToTable("Staff");
});