我们是否可以使用传递表值来调用实体框架查询

本文关键字:调用 实体 框架 查询 可以使 是否 我们 | 更新日期: 2023-09-27 17:56:12

是将表名作为参数传递并使用 make 通用函数从 db 获取记录的任何类型的方法

string table = "tbl_Category";
int Id  = Class.getLastId(table);

类.aspx

 public static int getLastId(string table)
    {
        int lastID = 0;
        using (HatnEntities context = new HatnEntities())
        {
            // Fetch Id of last record from table
                var result = (from c in context.tbl_Category.OrderByDescending(u => u.Id) select new { Id = c.Id }).FirstOrDefault();
                                                  ^
//any way to use table name from parameter value"+table+"

                if (result != null)
                {
                    lastID = Convert.ToInt32(result.Id);
                }
                obj.Id = lastID + 1;
                context.tbl_Category.Add(obj);
                context.SaveChanges();
        }
        return status;
    }

请让我知道是否有可能

我们是否可以使用传递表值来调用实体框架查询

您可以使用 Set(),这需要传递表字符串参数,您必须从程序集中获取 Type。

context.Set<TypeFromTableStringParameter>() ...

如果您只想能够访问 EF 中的任何表,则必须执行以下操作:

public static int getLastId<T>()
    where T : PrimaryKey
{
    using (HatnEntities context = new HatnEntities())
    {
        // Fetch Id of last record from table
        var result = (from c in context.Set<T>().OrderByDescending(u => u.Id) select new { Id = c.Id }).FirstOrDefault();
        var lastID = 0;
        if (result != null)
        {
            lastID = Convert.ToInt32(result.Id);
        }
        obj.Id = lastID + 1;
        context.Set<T>().Add(obj);
        context.SaveChanges();
    }
    // not sure where this comes from?
    return status;
}
public abstract class PrimaryKey
{
    public int Id { get; set; }
}

所有实体都需要继承(扩展)PrimaryKey,以便您根据属性Id SelectWhereFirstOrDefault(等)。