Skip to content

Commit 6edbf4f

Browse files
fix example
1 parent 6a52218 commit 6edbf4f

File tree

4 files changed

+49
-5
lines changed

4 files changed

+49
-5
lines changed

examples/src/EntityFrameworkCore.Ydb.QuickStart/Program.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using EntityFrameworkCore.Ydb.Extensions;
22
using Microsoft.EntityFrameworkCore;
3+
using Microsoft.EntityFrameworkCore.Design;
34

45
await using var db = new BloggingContext();
56

@@ -26,14 +27,35 @@
2627
db.Remove(blog);
2728
await db.SaveChangesAsync();
2829

30+
internal class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
31+
{
32+
public BloggingContext CreateDbContext(string[] args)
33+
{
34+
var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
35+
36+
return new BloggingContext(
37+
optionsBuilder.UseYdb("Host=localhost;Port=2136;Database=/local",
38+
builder => builder.DisableRetryOnFailure()
39+
).Options
40+
);
41+
}
42+
}
43+
2944
internal class BloggingContext : DbContext
3045
{
46+
internal BloggingContext()
47+
{
48+
}
49+
50+
internal BloggingContext(DbContextOptions<BloggingContext> options) : base(options)
51+
{
52+
}
53+
3154
public DbSet<Blog> Blogs { get; set; }
3255
public DbSet<Post> Posts { get; set; }
3356

34-
protected override void OnConfiguring(DbContextOptionsBuilder options)
35-
=> options.UseYdb("Host=localhost;Port=2136;Database=/local")
36-
.LogTo(Console.WriteLine);
57+
protected override void OnConfiguring(DbContextOptionsBuilder options) =>
58+
options.UseYdb("Host=localhost;Port=2136;Database=/local");
3759
}
3860

3961
internal class Blog

src/EFCore.Ydb/src/Infrastructure/Internal/YdbOptionsExtension.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public class YdbOptionsExtension : RelationalOptionsExtension
1313

1414
public X509Certificate2Collection? ServerCertificates { get; private set; }
1515

16+
public bool DisableRetryExecutionStrategy { get; private set; }
17+
1618
private DbContextOptionsExtensionInfo? _info;
1719

1820
public YdbOptionsExtension()
@@ -23,11 +25,13 @@ private YdbOptionsExtension(YdbOptionsExtension copyFrom) : base(copyFrom)
2325
{
2426
CredentialsProvider = copyFrom.CredentialsProvider;
2527
ServerCertificates = copyFrom.ServerCertificates;
28+
DisableRetryExecutionStrategy = copyFrom.DisableRetryExecutionStrategy;
2629
}
2730

2831
protected override RelationalOptionsExtension Clone() => new YdbOptionsExtension(this);
2932

30-
public override void ApplyServices(IServiceCollection services) => services.AddEntityFrameworkYdb();
33+
public override void ApplyServices(IServiceCollection services) =>
34+
services.AddEntityFrameworkYdb(!DisableRetryExecutionStrategy);
3135

3236
public override DbContextOptionsExtensionInfo Info => _info ??= new ExtensionInfo(this);
3337

@@ -49,6 +53,15 @@ public YdbOptionsExtension WithServerCertificates(X509Certificate2Collection? se
4953
return clone;
5054
}
5155

56+
public YdbOptionsExtension DisableRetryOnFailure()
57+
{
58+
var clone = (YdbOptionsExtension)Clone();
59+
60+
clone.DisableRetryExecutionStrategy = true;
61+
62+
return clone;
63+
}
64+
5265
private sealed class ExtensionInfo(YdbOptionsExtension extension) : RelationalExtensionInfo(extension)
5366
{
5467
public override bool IsDatabaseProvider => true;

src/EFCore.Ydb/src/Infrastructure/YdbDbContextOptionsBuilder.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@ public YdbDbContextOptionsBuilder WithCredentialsProvider(ICredentialsProvider?
1414

1515
public YdbDbContextOptionsBuilder WithServerCertificates(X509Certificate2Collection? serverCertificates) =>
1616
WithOption(optionsBuilder => optionsBuilder.WithServerCertificates(serverCertificates));
17+
18+
public YdbDbContextOptionsBuilder DisableRetryOnFailure() =>
19+
WithOption(optionsBuilder => optionsBuilder.DisableRetryOnFailure());
1720
}

src/EFCore.Ydb/src/Storage/Internal/YdbRelationalConnection.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class YdbRelationalConnection : RelationalConnection, IYdbRelationalConne
1313
{
1414
private readonly ICredentialsProvider? _credentialsProvider;
1515
private readonly X509Certificate2Collection? _serverCertificates;
16+
private readonly bool _disableRetryExecuteStrategy;
1617

1718
public YdbRelationalConnection(RelationalConnectionDependencies dependencies) : base(dependencies)
1819
{
@@ -21,14 +22,15 @@ public YdbRelationalConnection(RelationalConnectionDependencies dependencies) :
2122

2223
_credentialsProvider = ydbOptionsExtension.CredentialsProvider;
2324
_serverCertificates = ydbOptionsExtension.ServerCertificates;
25+
_disableRetryExecuteStrategy = ydbOptionsExtension.DisableRetryExecutionStrategy;
2426
}
2527

2628
protected override DbConnection CreateDbConnection()
2729
{
2830
var ydbConnectionStringBuilder = new YdbConnectionStringBuilder(GetValidatedConnectionString())
2931
{
3032
CredentialsProvider = _credentialsProvider,
31-
ServerCertificates = _serverCertificates
33+
ServerCertificates = _serverCertificates,
3234
};
3335

3436
return new YdbConnection(ydbConnectionStringBuilder);
@@ -40,6 +42,10 @@ public IYdbRelationalConnection Clone()
4042
{
4143
builder.WithCredentialsProvider(_credentialsProvider);
4244
builder.WithServerCertificates(_serverCertificates);
45+
if (_disableRetryExecuteStrategy)
46+
{
47+
builder.DisableRetryOnFailure();
48+
}
4349
}).Options;
4450

4551
return new YdbRelationalConnection(Dependencies with { ContextOptions = options });

0 commit comments

Comments
 (0)