0

我是 MVC 的新手。我有关于外键列的问题。我有两张表,称为公告和部门。Department_Id 是公告表中的外键。我还检查了它的数据库图。这是我的模型

  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; }
}

基础实体

    public class BaseEntity
{
    public int Id { get; set; }
    [ScaffoldColumn(false)]
    public bool IsDeleted { get; set; }
}

我的公告视图中有部门下拉列表,我从中选择一个部门,然后保存。但是在我的公告表中,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?
    }
}
4

1 回答 1

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);
于 2013-10-12T10:13:34.720 回答