是否可以将现有表格与实体框架中的现有实体一起映射,就像NHibernate一样。
例如。我有实体
public class User
{
public Int64 userId { set; get; }
public String Username { set; get; }
public Int64 RoleId { set; get; }
}
public class Role
{
public Int64 roleId { set; get; }
public String roleName { set; get; }
public IList<User> listUser { set; get; }
}
我将表格作为
Users with id,name,roleId
Roles with id,name.
现在我想使用XML文件映射两者。是否可以使用现有实体映射现有表。
答案 0 :(得分:0)
您有几个选择:
1)通过数据库第一个edmx文件管理你的映射(见http://www.asp.net/mvc/tutorials/mvc-5/database-first-development/creating-the-web-application)
2)从数据库第一种方法开始,然后使用流畅的api(见http://agilenet.wordpress.com/2011/04/11/entity-framework-4-1-rc-with-an-existing-database/)
首先转到代码。答案 1 :(得分:0)
EF中常用的映射方式是数据注释属性或流畅映射(实际上NHibernate流畅映射也更好,因为它为您提供了编译时检查)。所以,这里是您的课程的流畅映射:
public class UserMapping : EntityTypeConfiguration<User>
{
public UserMapping()
{
ToTable("Users"); // Not necessary, EF will use this mapping by default
HasKey(u => u.userId);
Property(u => u.userId).HasColumnName("id");
Property(u => u.Username).HasColumnName("name");
Property(u => u.RoleId).HasColumnName("roleId");
}
}
public class RoleMapping : EntityTypeConfiguration<Role>
{
public RoleMapping()
{
ToTable("Roles"); // Not necessary, EF will use this mapping by default
HasKey(r => r.roleId);
Property(r => r.roleId).HasColumnName("id");
Property(r => r.roleName).HasColumnName("name");
HasMany(r => r.listUser)
.WithRequired()
.HasForeignKey(u => u.RoleId);
}
}
只需将这些映射提供给您的DbContext:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserMapping());
modelBuilder.Configurations.Add(new RoleMapping());
base.OnModelCreating(modelBuilder);
}
我建议您阅读MSDN文章Configuring/Mapping Properties and Types with the Fluent API。
附注 - 另一篇要读的文章是Naming Guidelines,特别是它的大写样式部分。