如何将相同的查询应用于不同的实体?

Jos*_*mez 4 .net c# entity-framework visual-studio-2010

所以,我开始使用EF,我正在开发一个使用它作为ORM的应用程序.问题是我没有太多时间深入研究文档(我计划,在适当的时候),我有点迷失在某些事情上.例如,我有这两个查询:

public static int GetNextPadlockNumber()
        {
            LockersDBEntities1 entities = new LockersDBEntities1();
            var query = (from p in entities.PadLocks select p.PadlockNumber).DefaultIfEmpty(0).Max();
            return (int)query + 1;
        }

        public static Data.PadLock GetPadLockByNumber(int number)
        {
            Data.LockersDBEntities1 entities = new LockersDBEntities1();
            var query = (from p in entities.PadLocks where p.PadlockNumber == number select p).FirstOrDefault();
            return query;
        }
Run Code Online (Sandbox Code Playgroud)

public static int GetNextLockerNumber()
        {
            LockersDBEntities1 entities = new LockersDBEntities1();
            var query = (from l in entities.Lockers select l.LockerNumber).DefaultIfEmpty(0).Max();
            return (int)query+1;
        }

        public static Data.Locker GetLockerByNumber(int number)
        {
            Data.LockersDBEntities1 entities = new LockersDBEntities1();
            var query = (from l in entities.Lockers where l.LockerNumber == number select l).FirstOrDefault();
            return query;
        }
Run Code Online (Sandbox Code Playgroud)

事情是他们完全相同的查询.没有任何方法可以做到这一点,而无需指定我想要一个储物柜或挂锁?先谢谢大侠.

dut*_*tzu 5

您可以使用LockerNumberPadlockNumber作为身份自动增量字段,因为这是您正在做的事情,然后将它们命名为相同(例如Id).

这样就不再需要"获取下一个更衣室号码",因为插入的每个新实体都将获得下一个可用的数字,并且使用Repository模式,您可以将这些方法作为Base Repository类中的常用方法,如下所示:

public IEntity GetEntityById(int number)
{
   return ObjectSet.Single(x => x.Id == number);
}
Run Code Online (Sandbox Code Playgroud)