EF学习杂记38:如何使用CodeOnly with Astoria

当你在创建一个ADO.NET Data Services(我们通常称作Astoria)的时候,我们都是通过创建一个继承自DataService<T>类的方式来实现的。

public class BloggingService : DataService<BloggingEntities>

如果你想在EF中使用,<>中的类必须继承自ObjectContext类,这样的使用方式可以很好的工作,但是使用在Code Only的方式可能不行,原因是DataService的构造函数创建的是一个BloggingEntitys的实例,并且通过MetadataWorkspace取得相应的模型,但是问题是当你想在Code-Only中重新配置模型的时候,唯一的方式就是Code-Only ContextBuilder去创建BloggingEntities ,但是这个Astoria是不认识的。

不过我们有一个很简单的变通方法可以解决这个问题,你只需要简单的重写一下DataService<T>中的CreateDataSource()方法:

protected override BloggingService CreateDataSource()
{
    //Code-Only code goes here:
    var contextBuilder = GetConfiguredContextBuilder();
    var connection = GetSqlConnection();
    return contextBuilder.Create(connection);
}

上面的方法非常简单。

优化

处于性能的考虑,要避免频繁的重置ContextBuilder,所以GetConfiguredContextBuilder() 方法应该只被创建和重置一次,同时被缓存已被后续使用。

警告

由于Code-Only只适用于.Net 4.0,所以这里所说的方式创建DataService也只能用在.Net 4.0中。

你可能感兴趣的:(code)