使用EF6

时间:2016-08-04 10:56:39

标签: entity-framework

我正在设计一个表单,允许用户将基于结构的设计记录添加到数据库中。作为规范的一部分,用户希望能够从下拉列表中选择多个选项。在我的数据库中,我创建了设计表和一个存储选项的查找表。由于这是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;
        } 

1 个答案:

答案 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();
相关问题