我正在使用AngularJS作为前端,使用ASP.NET WEB API 2作为后端的任务管理工具。我在数据库中有两个实体,一个"任务"和"类型"。 每项任务都有一种关联类型。用户在创建新任务时填写表单,并且必须为该任务选择类型。
这是C#代码:
// KBTM_Task.cs file
public class KBTM_Task
{
public int ID { get; set; }
public string TaskID { get; set; } // User defined ID
public string Title { get; set; }
public string Description { get; set; }
}
// KBTM_Type.cs file
public class KBTM_Type
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
所以我的问题是:我如何"连接"这两个在数据库中?我的意思是,让我说我想将数据发布到数据库。我必须发两个POST,对吗?一个用于任务,一个用于类型,因为它们是两个独立的实体。
但由于它们存储了两个不同的ID,我怎么知道某个任务有某种类型?换句话说,如果我向KBTM_Task
发送GET请求,我该如何获得该任务的类型?
答案 0 :(得分:1)
修改KBTM_Task实体以包含类型ID和外键关系
public class KBTM_Task
{
public int ID { get; set; }
public string TaskID { get; set; } // User defined ID
public string Title { get; set; }
public string Description { get; set; }
public int TypeID { get; set; }
[ForeignKey("TypeID")]
public virtual KBTM_Type Type { get; set; }
}
这种方式当您从API获取数据时,您的任务对象已经包含可以更新的密钥(" TypeID")以及您的相关对象(" Type")可以访问其属性(名称,描述,...)。
在客户端对象(模型)上更新TypeID时,只需使用$ http.put()将更新的任务对象推送到API即可处理数据库更新。
答案 1 :(得分:1)
1)使用流畅的api(或数据注释)
添加外键// KBTM_Task.cs file
public class KBTM_Task
{
public int ID { get; set; }
public string TaskID { get; set; } // User defined ID
public string Title { get; set; }
public string Description { get; set; }
public int KBTM_TypeID {get;set}
public virtual KBTM_Type {get; set}
}
// KBTM_Type.cs file
public class KBTM_Type
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public KBTM_Task KBTM_Task { get; set;}
}
在继承自DbContext
的类中添加以下内容public class KbtmContext : DbContext
{
...
//public virtual DbSet<KBTM_Task> KbtmTasks {get; set;}
...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Configure KBTM_TypeID as FK for KBTM_Task
modelBuilder.Entity<KBTM_Task>()
.HasRequired(k => k.KBTM_Type)
.WithRequiredPrincipal(ad => ad.KBTM_Task);
}
}
2)如果在API响应或请求中公开实体类,则需要排除导航属性的序列化。
// KBTM_Task.cs file
public class KBTM_Task
{
...
[JsonIgnore]
public virtual KBTM_Type Type { get; set; }
}
在包管理器控制台中使用[JsonIgnore]
atttribute use Install-Package Newtonsoft.Json
。(管理序列化的一种流行解决方案)