diff --git a/docs/USAGE.md b/docs/USAGE.md index 399f1f6..1c6ac53 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -106,7 +106,19 @@ var repository = new SqlRepository(() => new SqlConnection(connectionString)); implements list/get/exists/add/update/upsert/delete against a `Table`. For a quick start, declaring a dedicated entity class is not necessary – the simplest form -is to instantiate `Entity` directly: +is to instantiate `Entity` directly, passing the table name as a plain string: + +```csharp +using Simpleverse.Repository.Db; +using Simpleverse.Repository.Db.Entity; + +var entity = new Entity(repository, "I"); +``` + +Internally this constructs a `Table` for you. The more complicated +`(repository, Table)` overload is still available and useful for advanced cases – +e.g. when you need to control schema qualification, quoting, or reuse a `Table` instance +that already exists elsewhere: ```csharp using Simpleverse.Repository.Db; diff --git a/src/Simpleverse.Repository.Db.Test/SqlServer/Entity/EntityTest.cs b/src/Simpleverse.Repository.Db.Test/SqlServer/Entity/EntityTest.cs index 6f8f1eb..1900497 100644 --- a/src/Simpleverse.Repository.Db.Test/SqlServer/Entity/EntityTest.cs +++ b/src/Simpleverse.Repository.Db.Test/SqlServer/Entity/EntityTest.cs @@ -343,6 +343,17 @@ public async Task ListAsync_WhenFilteredByNullableGuidListContainingNull_SkipsNu Assert.Equal(recordWithGuid.Guid, returned[0].Guid); } } + + [Fact] + public void Constructor_WhenGivenTableNameString_CreatesEquivalentTableToTableConstructorOverload() + { + // arrange & act + var entityFromTable = new IdentityEntity(_sqlRepository); + var entityFromTableName = new IdentityEntityByTableName(_sqlRepository); + + // assert + Assert.Equal(entityFromTable.TableName, entityFromTableName.TableName); + } } public class IdentityEntity : Entity @@ -354,6 +365,8 @@ public IdentityEntity(DatabaseFixture fixture) public IdentityEntity(SqlRepository sqlRepository) : base(sqlRepository, new Table("I")) { } + public string TableName => Source.TableName; + protected override void SelectQuery(QueryBuilder builder, IdentityQueryFilter filter, DbQueryOptions options) { var explicitKey = new Table("EK"); @@ -376,6 +389,19 @@ protected override void Filter(QueryBuilder builder, IdentityQueryFilt } } + public class IdentityEntityByTableName : Entity + { + public IdentityEntityByTableName(SqlRepository sqlRepository) : base(sqlRepository, "I") { } + + public string TableName => Source.TableName; + + protected override void Filter(QueryBuilder builder, IdentityQueryFilter filter) + { + builder.Where(x => x.Name, filter.Name); + base.Filter(builder, filter); + } + } + public class IdentityQueryFilter { public virtual string Name { get; set; } diff --git a/src/Simpleverse.Repository.Db/Entity/Entity.cs b/src/Simpleverse.Repository.Db/Entity/Entity.cs index 6562e90..73d44df 100644 --- a/src/Simpleverse.Repository.Db/Entity/Entity.cs +++ b/src/Simpleverse.Repository.Db/Entity/Entity.cs @@ -32,6 +32,11 @@ public Entity(DbRepository repository, Table source) Source = source; } + public Entity(DbRepository repository, string tableName) + : this(repository, new Table(tableName)) + { + } + #region IQuery #region Get @@ -670,6 +675,11 @@ public Entity(DbRepository repository, Table source) : base(repository, source) { } + + public Entity(DbRepository repository, string tableName) + : base(repository, tableName) + { + } } public class Entity @@ -681,6 +691,11 @@ public Entity(DbRepository repository, Table source) : base(repository, source) { } + + public Entity(DbRepository repository, string tableName) + : base(repository, tableName) + { + } } public class Entity @@ -691,5 +706,10 @@ public Entity(DbRepository repository, Table source) : base(repository, source) { } + + public Entity(DbRepository repository, string tableName) + : base(repository, tableName) + { + } } }