我需要实现以下模式: https://msdn.microsoft.com/en-us/library/dn589799.aspx
我读了一本关于以下内容的书:
如果您使用的是Entity Framework 6(EF 6),则重试逻辑为 瞬态故障内置于框架中。当你的EF 6型号是 在您的项目中,您需要创建一个派生自的新类 DbConfiguration并自定义执行策略 构造函数。 EF 6将寻找派生自的类 项目中的DbConfiguration并使用它们来提供弹性。至 设置此项,将新的类文件添加到项目中并添加使用 System.Data.Entity和System.Data.Entity.SqlServer。
的语句
代码如下:
// Setup Spark Stream with receiver
JavaReceiverInputDStream<String> transaction = jssc.receiverStream(new TransactionStreamReceiver(StorageLevel.MEMORY_AND_DISK()));
DataFrame person1 = //load logic ommitted
DataFrame person2 = //load logic ommitted
DataFrame person3 = //load logic ommitted
// Break up Person table for faster processing
transaction.foreachRDD(new TransactionProcessingFunction(person1, sqlContext, window,1));
transaction.foreachRDD(new TransactionProcessingFunction(person2, sqlContext, window,2));
transaction.foreachRDD(new TransactionProcessingFunction(person3, sqlContext, window,2));
但是我不确定如何在我的代码上实现它:
public class EFConfiguration : DbConfiguration
{
public EFConfiguration()
{
this.SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
}
}
答案 0 :(得分:1)
在这里,您对弹性和重试的一致性感到困惑。
连接弹性是指EF能够自动重试因这些连接(网络不可用)中断而失败的任何命令。
我希望你可能不想干涉这个因为EF做得很好。从您提到的MSDN article,您似乎想要为您的实体使用缓存模式。
我可以建议您尝试实施UnitOfWork以将您的上下文CRUD操作保存在一个位置。
然后,您可以在UnitOfWork类中实现缓存,并根据操作请求的类型获取/创建/使缓存项无效。
确保缓存模式不能提供100%的一致性。例如。如果外部操作更改了数据库中的数据,则Cache不会知道该更改。