0

我是MVC中的新手。我有關於外鍵列的問題。我有兩張名爲Annoucement and Departments的表格。 Department_Id是Annoucement表中的外鍵。我也檢查了它的數據庫圖。這裏是我的模型MVC:添加到外鍵表而不是更新相關列的新行

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查看我從中選擇一個部門,然後我保存它。 但在我的Annoucement Table中,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

保存到高大的實體框架,部門是不是一個新的實體之前附加部門當前上下文。 – alxndr

+0

我會在上下文中做什麼?我仍然在努力,我通過stackoverflow搜索我發現像我這樣的問題,但我仍然無法解決它。我想我在上下文類中添加onmodelcreatind,但我不明白我能在這裏做什麼。 –

+0

顯示更多的代碼保存你的實體。 onModelCreating用於流暢的映射,不幫你解決這個問題。 – alxndr

回答

0

您可以在OnModelCreating中聲明數據庫上下文的其他規則和行爲,以確保數據庫的完整性。一些例子說明如下:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 

這段聲明表示,「我不希望刪除通過外鍵鏈接兒童記錄」

modelBuilder.Entity<MyTable>().Property(x => x.Quantity).HasPrecision(7, 1); 

此聲明定義MyTable的實體的數量字段的精度。

基本上,您的文章沒有足夠的信息來直接解決您的問題。 但是,您可能會嘗試爲您的dbcontext添加以下約定。

modelBuilder.Entity<Annoucement>().Property(p => p.department_id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

此聲明允許您防止自動生成Annoucement表中的department_id列。

不要忘記在OnModelCreating方法的末尾添加以下行

base.OnModelCreating(modelBuilder); 
相關問題