0
在我的應用程序中,我有許多可本地化的實體。這個實體 的數據庫結構是。某些表格中PK的類型可能不同(其中一些是int,一些是bigint)。這取決於多少數據將被存儲在一個表中。 我使用Dapper作爲ORM。C#存儲庫和可本地化的實體
現在我有這個解決方案(但裏面的東西告訴我,這個解決方案是壞的):
// ENTITY
public abstract class Entity
{
public object Id { get; set; }
}
public abstract class Entity<TKey> : Entity
{
public new TKey Id { get; set; }
}
// LOCALIZABLE ENTITY
public abstract class LocalizableEntity<TTranslation> : Entity
where TTranslation : EntityTranslation
{
public ICollection<TTranslation> Translations { get; set; }
}
public abstract class LocalizableEntity<TKey, TTranslation> : Entity<TKey>
where TTranslation : EntityTranslation
{
public ICollection<TTranslation> Translations { get; set; }
}
// ENTITY TRANSLATION
public abstract class EntityTranslation
{
public object LocalizableId { get; set; }
public int LanguageId { get; set; }
}
public abstract class EntityTranslation<TKey> : EntityTranslation
{
public new TKey LocalizableId { get; set; }
}
// REPOSITORIES
public class BaseRepository: IRepository, IDisposable
{
public string ConnectionString { get; set; }
// ....
}
public abstract class BaseEntityRepository: BaseRepository
{
protected IDbConnection Connection => _connection ?? (_connection = CreateDbConnection(GetConnectionStringValue(ConnectionString)));
protected abstract IDbConnection CreateDbConnection(string connectionString);
// SaveEntity<T>(T entity), DeleteEntity(object id)
}
public abstract class BaseEntityRepository<TEntity, TKey, TSearchOptions, TLoadOptions> : BaseEntityRepository
where TEntity : Entity<TKey>
where TSearchOptions : SearchOptions
where TLoadOptions : LoadOptions
{
// GetEntities(TSearchOptions sopts, TLoadOptions lopts), EntityCount(TSearchOptions) ...
}
public abstract class BaseLocalizableEntityRepository<TEntity, TKey, TEntityTranslation, TSearchOptions, TLoadOptions> : BaseEntityRepository<TEntity, TSearchOptions, TLoadOptions>
where TEntity : Entity<TKey>
where TEntityTranslation : EntityTranslation<TKey>
where TSearchOptions : SearchOptions
where TLoadOptions : LoadOptions
{
// GetTranslations, SaveTranslation ...
}
它是好還是壞?如果不好,我該怎麼做?
建立在「.resx」文件中的本地化是否適合您?或者您需要高度可定製的本地化?即用戶必須編寫翻譯。 –
@MichaelMairegger我需要高度可定製的本地化。 – Alex
這是一個問題,整理。如果您在一個數據庫列中使用不同語言,則可能無法使用給定語言的正確歸類排序,因爲歸類屬於該列。我不知道這個解決方案。找到一個會很好,因爲這些替代品似乎都涉及動態SQL。 – bbsimonbb