ASP.MVC db Find(),但带有非主键参数

时间:2013-08-31 07:38:11

标签: asp.net-mvc database find composite-primary-key dbset

如何使用不是主键的密钥获取结果列表?更具体地说,我有一个复合主键,我想用一列的参数检索所有匹配。

我认为,在Controller的ActionResult中,它就像

tableModel tbmodel = db.tableModels.Find(i => i.partialPK == parameter)

但事实并非如此,因为Find()仅适用于整个PK。

我在实体模型类中将我的PK声明为:

    [Key]
    [Column(Order = 0)] 
    public int PK1 { get; set; }
    [Key]
    [Column(Order = 1)] 
    public string PK2 { get; set; }

2 个答案:

答案 0 :(得分:7)

根据DbSet.Find,您可以传入以逗号分隔的主键

db.tableModels.Find(PK1, PK2)
  

Find方法将对象数组作为参数。使用复合主键时,传递以逗号分隔的键值,其顺序与模型中定义的顺序相同。

但是,如果您只想使用一个值,则可能需要使用

db.tableModels.Where(i => i.partialPK == parameter)

或等效的Linq运算符

答案 1 :(得分:0)

如果您尝试从数据库中使用linq查询获取对象,请使用:.FirstOrDefault.Where

Customer customer = db.Customers.Where(c => c.Email == auth.Email).FirstOrDefault();

这里dbDbContextCustomerDbSet