我是MVC的新手。我有关于外键列的问题。我有两个名为Annoucement和Departments的表。 Department_Id是Annoucement表中的外键。我也检查了它的数据库图。这是我的模特
public class Announcement : BaseEntity
{
public Announcement()
{
CreatedDatetime = DateTime.Now;
}
public String Title { set; get; }
public string ContentText { set; get; }
[Display(Name = "Date")]
[DataType(DataType.DateTime), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime CreatedDatetime { get; set; }
public Department Department { set; get; }
}
系
public class Department : BaseEntity
{
public string Code { get; set; }
public string DepartmentName { get; set; }
public string ShortName { get; set; }
}
BaseEntity
public class BaseEntity
{
public int Id { get; set; }
[ScaffoldColumn(false)]
public bool IsDeleted { get; set; }
}
我在Annoucement View中有部门下拉列表我从中选择一个部门,然后保存。 但是在我的Annoucement表中,foreignKey部分填充了插入Departments表的新部门ID。 当我保存它时,它将新行插入Departments表并获取该id以在department_id列中插入Annoucement表。
这是我的部门下拉列表
@Html.DropDownListFor(x => x.Department.Id, Model.Departments, new {@class = "ui-select",@id="ddlDepartments"})
Model.Departments是
public IEnumerable<SelectListItem> Departments { get; set; }
我不明白为什么它会那样工作,请解释我哪里出错了。 如果您需要更多信息,我会回信。 谢谢。
编辑:
我在寻找时找到了一些东西。我想我在上下文课上做了些什么。我应该添加OnModelCreating,但我不知道该怎么办?
public class DataContext : DbContext
{
public DataContext()
: base("DataContext")
{
}
public IDbSet<Announcement> Announcements { set; get; }
public IDbSet<Department> Departments { set; get; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//I dont know what to do here?
}
}
答案 0 :(得分:0)
您可以在OnModelCreating中为数据库上下文声明其他规则和行为,以确保数据库的完整性。一些例子如下:
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
此声明表示“我不想删除由外键链接的子记录”
modelBuilder.Entity<MyTable>().Property(x => x.Quantity).HasPrecision(7, 1);
此声明定义MyTable实体的Quantity字段的精度。
基本上,您的帖子没有足够的信息直接解决您的问题。 但您可以尝试为dbcontext添加以下约定。
modelBuilder.Entity<Annoucement>().Property(p => p.department_id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
此声明允许您阻止在Annoucement表中自动生成department_id列。
不要忘记在OnModelCreating方法
的末尾添加以下行base.OnModelCreating(modelBuilder);