实体框架多对多和现有数据从角度发布

时间:2017-11-04 10:39:36

标签: entity-framework asp.net-web-api many-to-many

来自Database First的实体框架在C#WebApi中创建了具有多对多关系的Table模型类。

表ACCOUNTS和表METADATA之间存在多对多关系。 我想在ACCOUNTS表上添加一个新条目,并将此条目与METADATA表中的一些现有条目相链接。如何使用AngularJS发布数据呢?

我发送的数据是$ http:

var account: {
    Title: 'Title',
    User: 'User',
    METADATA: [
    {
        Name: 'value1'
    }, 
    {
        Name: 'value2'
    }]
}

上面的帐户变量基于ACCOUNTS类,C#web api正在使用POST和[FromBody]读取,如下所示:

    [HttpPost]
    public async Task<IHttpActionResult> Add([FromBody]ACCOUNTS account)
    {                               
        db.ACCOUNTS.Add(account);
        await db.SaveChangesAsync();

        int accountId = account.AccountId;

        return Ok(accountId);
    }

我收到表METADATA上存在value1和value2的主键违规错误。 这是正确的,因为表中存在值。

但实际上我希望这些值链接到“中间表”,它将ACCOUNTS和METADATA链接为多对多关系,而不是添加。

此方案的任何解决方案?

1 个答案:

答案 0 :(得分:1)

在插入传递的已断开连接的account对象之前,需要将子METADATA对象映射到现有数据库实体。例如,使用这样的东西:

var medataNames = account.METADATA.Select(e => e.Name);
account.METADATA = db.METADATA.Where(e => metadataNames.Contains(e.Name)).ToList();
db.ACCOUNTS.Add(account);
// ...