MVC:新行添加到外键表而不是更新相关列

时间:2013-10-11 21:33:03

标签: asp.net-mvc entity-framework asp.net-mvc-4 ef-code-first

我是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?
    }
}

1 个答案:

答案 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);