EF SingleOrDefault не работает в ASP.NET - PullRequest
0 голосов
/ 14 апреля 2011

Я написал несколько юнит-тестов для моего проекта, который тестирует моих докладчиков, эти докладчики запрашивают контекст EF с помощью SingleOrDefault, все модульные тесты выполнены успешно.Но когда я запускаю свое приложение ASP.NET, я постоянно получаю сообщение об ошибке «Single» не поддерживается Linq to Entities? »Я хочу знать, почему это поведение включается?Я не могу найти никаких документов об этом поведении.

Я использую следующий код:

Ведущий:

public class ManagedQueryPresenter : BasePresenterMetModel<IManagedQueriesView, ManagedQueryBeheerModel>, IWebPartPresenter
    {
        public ManagedQueryPresenter(IManagedQueriesView view) : base(view, new ManagedQueryBeheerModel()) { }

        #region IPagePresenter Members

        public void OnViewInitialize()
        {

        }

        public void OnViewInitialized()
        {

        }

        public void OnViewLoaded()
        {

        }

        #endregion

        public void OnManagedQueriesSelecting()
        {
            View.ManagedQueries = Model.GetAll();
        }

        public void OnManagedQueryInserted(ManagedQuery entity)
        {
            Model.AddManagedQuery(entity);
            View.ManagedQueries = Model.GetAll();
        }

        public void OnManagedQueryUpdated(ManagedQuery entity)
        {
            Model.UpdateManagedQuery(entity);
        }

        public void OnManagedQueryDeleted(ManagedQuery entity)
        {
            Model.DeleteManagedQuery(entity);
        }
    }

Модель:

public class ManagedQueryBeheerModel : BaseModel, IModel
{
    public void AddManagedQuery(ManagedQuery entity)
    {
        ...
    }

    public void DeleteManagedQuery(ManagedQuery entity)
    {
        ...
    }

    public void UpdateManagedQuery(ManagedQuery entity)
    {
        DoEntityAction<bool>(context =>
        {
            ManagedQuery toUpdate = context.ManagedQueries.Include(q => q.ManagedQueryParameters).SingleOrDefault(x => x.ID == entity.ID);

            ...

            context.SaveChanges();

            return true;
        });
    }

    public IList<ManagedQuery> GetAll()
    {
        return DoRepositoryAction<ManagedQuery, List<ManagedQuery>>(repository => (List<ManagedQuery>)repository.GetAll());
    }

    public ManagedQuery Get(long ID)
    {
        return DoRepositoryAction<ManagedQuery, ManagedQuery>(repository => repository.GetSingleOrDefault(x => x.ID == ID));
    }
}

UnitTest:

    [TestMethod()]
    public void OnManagedQueryUpdatedTest()
    {
        IManagedQueriesView view = new MockedManagedQueriesView(); 
        ManagedQueryPresenter target = new ManagedQueryPresenter(view);
        ManagedQuery entity = ManagedQueryHelper.CreateNewRecord(target.Model);
        entity.Name += "Updated";
        target.OnManagedQueryUpdated(entity);
    }

public static class ManagedQueryHelper
    {
        public static ManagedQuery CreateNewRecord(ManagedQueryBeheerModel model)
        {
            ManagedQuery entity = new ManagedQuery
            {
                Description = "Test Query",
                Name = "Test",
                QueryText = @"SOME QUERY",
                HasOutput = true,
                Category = "Test",
            };
            model.AddManagedQuery(entity);
            return entity;
        }
    }

ASP.NET View (код от ascx):

public partial class ManagedQueriesUserControl : WebPartMangedUserControlWithPresenter<ManagedQueryPresenter>, IManagedQueriesView
    {
        protected ASPxGridView _grid;
        protected ObjectContainerDataSource _ocdsManagedQueries;

        #region IServicesView Members

        public IList<Entities.ManagedQuery> ManagedQueries
        {
            set 
            {
                _grid.ForceDataRowType(typeof(ManagedQuery));
                _ocdsManagedQueries.DataSource = value; 
            }
        }

        #endregion

        protected void _ocdsManagedQueries_Deleted(object sender, Microsoft.Practices.Web.UI.WebControls.ObjectContainerDataSourceStatusEventArgs e)
        {
            Presenter.OnManagedQueryDeleted((ManagedQuery)e.Instance);
        }

        protected void _ocdsManagedQueries_Updated(object sender, Microsoft.Practices.Web.UI.WebControls.ObjectContainerDataSourceStatusEventArgs e)
        {
            Presenter.OnManagedQueryUpdated((ManagedQuery)e.Instance);
        }

        protected void _ocdsManagedQueries_Inserted(object sender, Microsoft.Practices.Web.UI.WebControls.ObjectContainerDataSourceStatusEventArgs e)
        {
            Presenter.OnManagedQueryInserted((ManagedQuery)e.Instance);
        }

        protected void _ocdsManagedQueries_Selecting(object sender, Microsoft.Practices.Web.UI.WebControls.ObjectContainerDataSourceSelectingEventArgs e)
        {
            Presenter.OnManagedQueriesSelecting();
        }

        #region IWebPartView Members

        public bool IsValid()
        {
            return Page.IsValid;
        }

        public string ErrorText
        {
            set { }
        }

        #endregion
    }

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Я полагаю, что вы можете найти ответ в этой теме Ошибка, метод не поддерживается LINQ to Entities

0 голосов
/ 22 апреля 2011

Я забыл, что юнит-тесты по умолчанию в VS2010 написаны в .NET 4, а мой код в .NET3.5, поэтому он не работает. В EF4 поддерживается Single (OrDefault)!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...