use*_*934 5 entity-framework ef-code-first
我使用的是EF5和.NET 4.5.我有一个特定的类在数据库中生成不正确.虽然我的网站有点复杂,但我会简化;
namespace Store.Enities
{
public enum Role
{ Manager, Clerk }
public class User
{
public int Id {get; set;}
public ICollection<Role> Roles {get; set;}
}
public class StoreContext : DbContext
{
public DbSet<User> Users {get; set;}
public StoreContext()
{
Database.SetIntializer(new DropCreateDatabaseIfModelChanges<StoreContext>());
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,用户可以拥有多个角色.出于某种原因,我无法将角色存储在数据库中.
Ger*_*old 10
枚举仍然是原始类型,特别是整数.正如您的User类不能ICollection<int>映射到数据库中的某些内容一样,它也不能包含枚举的集合.
您应该定义一个Role看起来像这样的类:
public class Role
{
public int Id {get; set;}
public Roles Role {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
并将枚举的名称更改为Roles(或除此之外Role).
我仍在运行Windows XP SP3,所以我无法安装.NET Framework 4.5,我无法运行测试,看看有什么不对,但我猜.在您的设计中,每个"用户"可能具有零到多"角色",现在按惯例,实体框架将在"角色"上生成外键以引用"用户",但由于"角色"是枚举,它是复杂对象(值对象)实体框架不支持这种情况,"实体框架不支持在实体类型上具有复杂类型的集合",您需要使角色成为实体并为其提供ID.只是为了确保我是正确的尝试一对一地建立关系(每个用户只有一个角色),如果它工作,那么我是对的.
| 归档时间: |
|
| 查看次数: |
2982 次 |
| 最近记录: |