我正在设计一个表单,允许用户将基于结构的设计记录添加到数据库中。作为规范的一部分,用户希望能够从下拉列表中选择多个选项。在我的数据库中,我创建了设计表和一个存储选项的查找表。由于这是1对多对1的关系,我创建了一个联结表。
Design table
-------------
designid,
option
Option table
------------
optionid,
optionname
DesignDesignOption table
------------------------
designid,
optionid
使用EF db first选项我有2个名为design and option的模型。 EF省略了联结表。
从下拉列表中我得到了一个已被选中的字符串数组,但我不确定如何将该条目添加到联结表中。我是否必须查询数据库,根据ID选择从数据库中选择的选项?我真的不知道如何做到这一点。
到目前为止,我的代码如下。到目前为止,我还没有添加处理联结表的代码:
public bool InsertDesign(Design design){
if (!Validate(design)) {
return false;
}
design.ModifiedDate = DateTime.Now;
design.ModifiedByFullName = base.GetUsersFullName();
design.ModifiedBy = base.GetUserLogin();
_context.Designs.Add(design);
_context.SaveChanges();
return true;
}
答案 0 :(得分:0)
我想,你有OptionIds列表,Options
模型应该有Design
导航属性。那你有两个选择:
如您所述,根据ID列表选择选项:
var optionIds = ...;
// Get options from database
List<Option> options = _context
.Options
.Where(m => optionIds.Contains(m.OptionId))
.ToList();
design.Options = options;
_context.Designs.Add(design);
_context.SaveChanges();
如果您不想从数据库中选择数据,则可以将添加选项的状态设置为Unchanged;
using System.Data.Entity;
var optionIds = ...;
// Initialize options according to Ids
List<Option> optionList = new List<Option>();
optionIds.ForEach(m => optionList.Add(new Option { OptionId = m})));
// Set options of desing and add it to context
design.Options = optionList;
_context.Designs.Add(design);
// Set state of options to unchanged to not affect their data and save changes
optionList.ForEach(m => _context.Entry(m).State = EntityState.Unchanged);
_context.SaveChanges();