实体框架 - 从数据库刷新对象

Neb*_*ron 10 database wpf entity-framework objectcontext

我在刷新数据库中的对象时遇到问题.我有两个PC和两个应用程序.

在第一台PC上,有一个与我的数据库通信的应用程序,并将一些数据添加到Measurements表中.在我的另一台PC上,有一个应用程序可以在一个计时器下检索最新的测量,所以它应该在我的第一台PC上检索应用程序添加的测量结果.

问题是它没有.在我的应用程序启动时,它会缓存数据库中的所有数据,并且永远不会添加新数据.我使用Refresh()方法,当我更改任何缓存数据时它很有效,但它不刷新新添加的数据.

这是我应该更新数据的方法:

    public static Entities myEntities = new Entities();

    public static Measurement GetLastMeasurement(int conditionId)
    {
        myEntities.Refresh(RefreshMode.StoreWins, myEntities.Measurements);

        return (from measurement in myEntities.Measurements
                where measurement.ConditionId == conditionId
                select measurement).OrderByDescending(cd => cd.Timestamp).First();
    }
Run Code Online (Sandbox Code Playgroud)

PS应用程序在app.config中有不同的连接字符串(同一个数据库的不同帐户).

Luk*_*Led 9

这应该工作:

public static Entities myEntities = new Entities();

public static Measurement GetLastMeasurement(int conditionId)
{
    myEntities.Refresh(RefreshMode.StoreWins, myEntities.Measurements);
    var allMeasurements = myEntities.Measurements.ToList();//retrieves all measurements from database

    return (from measurement in allMeasurements
            where measurement.ConditionId == conditionId
            select measurement).OrderByDescending(cd => cd.Timestamp).First();
}
Run Code Online (Sandbox Code Playgroud)

每次想要使用它时刷新存储时有什么意义?你可以把它变成:

public Measurement GetLastMeasurement(int conditionId)
{
    var entities = new Entities();
    return (from measurement in entities.Measurements
            where measurement.ConditionId == conditionId
            select measurement).OrderByDescending(cd => cd.Timestamp).First();
}
Run Code Online (Sandbox Code Playgroud)

它还可以在每次调用时查找数据库,但操作更少.


Rei*_*las 8

从EF 4.1开始,您可以在实体上使用AsNoTracking()方法.

return myEntities.Measurements.AsNoTracking();
Run Code Online (Sandbox Code Playgroud)

请注意,AsNoTracking()不会将实体添加到您的上下文中进行跟踪,而只是从数据存储中重新返回它们.

有关详细信息,请参阅http://blogs.msdn.com/b/adonet/archive/2011/02/05/using-dbcontext-in-ef-feature-ctp5-part-11-load-and-asnotracking.aspx