asp.net mvc - 在第三个 table 中插入多条记录,使用 entity framework 6
asp.net mvc - Inserting multiple records in the third table having foreign keys to parent using entity framework 6
我正在尝试学习如何将 Entity Framework 6 与已创建的数据库一起使用,而不创建 .edmx
文件,即使用 DbContext
和 POCO classes.
这些是我的模型classes:
[Table("Category")]
public class Category
{
[Key]
public long CategoryID { get; set; }
public string CategoryName { get; set; }
}
[Table("RegistrationForm")]
public class RegistrationForm
{
[Key]
public int RegistrationID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Country { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
[Table("RegistrationCategory")]
public class RegistrationCategory
{
[Key]
public long RegistrationCategory { get; set; }
public long RegistrationID { get; set; }//Foreign key to RegistrationID in RegistrationForm table in database
public long CategoryID { get; set; }//Foreign key to CategoryID in Category table in database
}
我的DbContext
class:
public class MyContext : DbContext
{
public virtual DbSet<RegistrationForm> RegistrationForm { get; set; }
public virtual DbSet<Category> Category { get; set; }
public virtual DbSet<RegistrationCategory> RegistrationCategory { get; set; }
}
这里我想使用DbContext
的默认模型构建器。用户可以在注册屏幕中select多个类别所以RegistrationCategory
table将有多个记录对于每个注册。因此 RegistrationForm
和 RegistrationCategory
是 one-to-many
关系。
如何编写上述模型之间的外键映射?
如何绑定Category
table数据到mvc view
(listbox
)中,这样我们就可以在RegistrationForm
中保存一条记录table 和 RegistrationCategory
table 中的多个记录 Entity Framework 6?
中不使用循环(使用 c# 模型之间的映射)
这里的数据库模式是 RegistrationForm
和 Category
之间的多对多关系,带有连接 table。 RegistrationCategory
Table 完全没有必要在 Entity Framework 中建模。您将需要使用 Entity Framework Fluent API 来生成正确的映射。
首先,你的 RegistrationForm
Table:
public class RegistrationForm
{
[Key]
public int RegistrationID { get; set; }
...
// add a navigation property ICollection<Category> to reference the categories
public virtual ICollection<Category> Categories { get; set; }
}
接下来,Category
class:
public class Category
{
[Key]
public int CategoryID { get; set; }
public string CategoryName { get; set; }
//Navigation property to reference the RegistrationForms
public virtual ICollection<RegistrationForm> RegistrationForms { get; set; }
}
接下来,在您的 DbContext 中:注意 复数的变化,以及 RegistrationCategory
的移除,您不需要模型 class完全没有。
public class MyContext : DbContext
{
public virtual DbSet<RegistrationForm> RegistrationForms { get; set; }
public virtual DbSet<Category> Categories { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<RegistrationForm>()
.HasMany(r => r.Categories)
.WithMany(c => c.RegistrationForms)
.Map(
m =>
{
m.MapLeftKey("RegistrationID");
m.MapRightKey("CategoryID");
m.ToTable("RegistrationCategory");
}
);
}
有了这个,您现在可以查询 RegistrationForm
的所有 Categories
或 Category
的所有 RegistrationForms
。
foreach (var category in registrationForm.Categories)
{
//do whatever with each category
}
我正在尝试学习如何将 Entity Framework 6 与已创建的数据库一起使用,而不创建 .edmx
文件,即使用 DbContext
和 POCO classes.
这些是我的模型classes:
[Table("Category")]
public class Category
{
[Key]
public long CategoryID { get; set; }
public string CategoryName { get; set; }
}
[Table("RegistrationForm")]
public class RegistrationForm
{
[Key]
public int RegistrationID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Country { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
[Table("RegistrationCategory")]
public class RegistrationCategory
{
[Key]
public long RegistrationCategory { get; set; }
public long RegistrationID { get; set; }//Foreign key to RegistrationID in RegistrationForm table in database
public long CategoryID { get; set; }//Foreign key to CategoryID in Category table in database
}
我的DbContext
class:
public class MyContext : DbContext
{
public virtual DbSet<RegistrationForm> RegistrationForm { get; set; }
public virtual DbSet<Category> Category { get; set; }
public virtual DbSet<RegistrationCategory> RegistrationCategory { get; set; }
}
这里我想使用DbContext
的默认模型构建器。用户可以在注册屏幕中select多个类别所以RegistrationCategory
table将有多个记录对于每个注册。因此 RegistrationForm
和 RegistrationCategory
是 one-to-many
关系。
如何编写上述模型之间的外键映射?
如何绑定Category
table数据到mvc view
(listbox
)中,这样我们就可以在RegistrationForm
中保存一条记录table 和 RegistrationCategory
table 中的多个记录 Entity Framework 6?
这里的数据库模式是 RegistrationForm
和 Category
之间的多对多关系,带有连接 table。 RegistrationCategory
Table 完全没有必要在 Entity Framework 中建模。您将需要使用 Entity Framework Fluent API 来生成正确的映射。
首先,你的 RegistrationForm
Table:
public class RegistrationForm
{
[Key]
public int RegistrationID { get; set; }
...
// add a navigation property ICollection<Category> to reference the categories
public virtual ICollection<Category> Categories { get; set; }
}
接下来,Category
class:
public class Category
{
[Key]
public int CategoryID { get; set; }
public string CategoryName { get; set; }
//Navigation property to reference the RegistrationForms
public virtual ICollection<RegistrationForm> RegistrationForms { get; set; }
}
接下来,在您的 DbContext 中:注意 复数的变化,以及 RegistrationCategory
的移除,您不需要模型 class完全没有。
public class MyContext : DbContext
{
public virtual DbSet<RegistrationForm> RegistrationForms { get; set; }
public virtual DbSet<Category> Categories { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<RegistrationForm>()
.HasMany(r => r.Categories)
.WithMany(c => c.RegistrationForms)
.Map(
m =>
{
m.MapLeftKey("RegistrationID");
m.MapRightKey("CategoryID");
m.ToTable("RegistrationCategory");
}
);
}
有了这个,您现在可以查询 RegistrationForm
的所有 Categories
或 Category
的所有 RegistrationForms
。
foreach (var category in registrationForm.Categories)
{
//do whatever with each category
}