【问题标题】:MVC: New row added to Foreign Key table instead of updating related columnMVC:将新行添加到外键表中,而不是更新相关列
【发布时间】:2013-10-11 21:33:02
【问题描述】:

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

【问题讨论】:

  • 将部门附加到当前上下文,然后保存到该部门不是新实体的 tall 实体框架。
  • 在上下文中我会做什么?我还在研究它,我通过stackoverflow搜索我发现了一些像我一样的问题,但我仍然无法解决它。我想我在上下文类中添加了 onmodelcreatind 但我不明白我能在这里做什么。
  • 在您保存实体的位置显示更多代码。 onModelCreating 用于流畅的映射,并不能帮助您解决这个问题。

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


【解决方案1】:

您可以在 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多