2
我正面臨使用EF的問題。我有以下情況:實體框架映射實體到多個表?
表用戶:用戶名,密碼,角色ID,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);
}
我測試過,但預期它不工作。我總是收到此消息:
'User'類型的屬性只能映射一次。非關鍵屬性'名稱'被映射多次。確保Properties方法只指定每個非關鍵屬性一次。
我錯過了什麼嗎?
也許有人有一個實際的解決方案 - 但我*認爲*你將不得不走與你一樣的道路'角色'(外鍵,...) – Carsten
用戶是否繼承了你用戶類的sers?或者你的代碼對於所有這些實體只有一個用戶?你可以在這裏查找繼承策略:http://blogs.msdn.com/b/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx我看到你有一個角色實體,我不認爲我會如何解決它......我會有一個基礎人員,讓用戶,管理員和工作人員繼承這個抽象類。然後我會使用Table Per Type(TPT)來避免我的數據庫中有多個空值。 – jonas