EF 如何根据ID插入中间表的信息

baidu_27549073 2017-04-18 03:11:43
例子:
EF中存在下面3个对象


public DbSet<Link> Links { get; set; }
public DbSet<AccountLinkMatch> AccountLinks { get; set; }
public DbSet<Account> Accounts { get; set; }
public class Link
{
[Key]
public int ID { get; set; }
public string Icon { get; set; }
public string Title { get; set; }
public string Url { get; set; }
public LinkType Type { get; set; }

public virtual Link ParentLink { get; set; }
public virtual List<Link> ChildrenLinks { get; set; }
public virtual List<AccountLinkMatch> AccountLinks { get; set; }
}
public class AccountLinkMatch
{
public int ID { get; set; }
public virtual Account Account { get; set; }
public virtual Link Link { get; set; }
}

public class Account
{
public int ID { get; set; }
public string UserName { get; set; }
public string PassWord { get; set; }
public virtual List<AccountRoleMatch> AccountRole { get; set; }
public virtual List<AccountLinkMatch> AccountLinks { get; set; }
}

我以为能这样写,通过构建新的对象,然后直接ADD:

/// <summary>
/// 编辑页面权限
/// </summary>
/// <param name="accountID">账号ID</param>
/// <param name="OAuth">权限ID数组</param>
/// <returns></returns>
[HttpPost]
[Auth]
public ActionResult EditAccountLink(int accountID, int[] OAuth)
{
var ef = ContextPlatFormFactory.Instance;
//修改之前的权限
var oldAuths = ef.AccountLinks.Where(c => c.Account.ID == accountID).Select(c => c.Link.ID);
//没有权限信息,全部删除
if (OAuth==null)
{
ef.AccountLinks.Where(c => c.Account.ID == accountID).Delete();
}
else
{
//删除无效权限
ef.AccountLinks.Where(c => !OAuth.Contains(c.Link.ID)).Delete();
//添加新加权限
ef.AccountLinks.AddRange(OAuth.Select(c => new AccountLinkMatch() { Account = new Account() { ID = accountID }, Link = new Link() { ID = c } }));
}
ef.SaveChanges();
return Json(0);
}

然而失败了,ef在Link表中新加了空数据。
我知道能够先根据ID查Link集合再添加,但是这种效率会不会不高?
我先用SQL将这个功能做了,但是请大神教教我有没有什么好办法。
...全文
404 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_27549073 2017-05-08
  • 打赏
  • 举报
回复
引用 2 楼 chicky 的回复:
类似这样的中间表直接把ID去掉,两个外键做联合主键,EF自己会处理,不用单独维护,只要维护角色有哪些人员更新的时候自动增删改的。
学习了,以前看过的,搞忘了,看你说的才想起来
EthanJiang0827 2017-05-03
  • 打赏
  • 举报
回复
类似这样的中间表直接把ID去掉,两个外键做联合主键,EF自己会处理,不用单独维护,只要维护角色有哪些人员更新的时候自动增删改的。
baidu_27549073 2017-04-18
  • 打赏
  • 举报
回复
已经解决,最后采用了根据ID查集合,最后附加上去的方法。这种方法要麻烦些。但是也比一个一个插入方便一点。

17,747

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧