1: simple PL / SQL, des citations à double effet
guillemets simples: guillemets simples délimiteur de chaîne est utilisé pour définir un littéral de chaîne
Les guillemets doubles: guillemet est un séparateur d'identifiant de référence peut être utilisé pour accéder à la table créée à partir d'un répertoire de base de données avec la manière sensible à la casse, si vous êtes distinctif de manière sensible créer des tables de base de données, cela est nécessaire. Les guillemets doubles pourraient conduire note cités mots-clés séjour.
2: core EF avec guillemets doubles dans le traitement SQL
Les problèmes rencontrés get erreur d'exécution pris journal:
2020-03-17 21:35:33,618 [9 ERROR] ---- Failed executing DbCommand (414ms) [Parameters=[], CommandType='Text', CommandTimeout='0']
SELECT "s"."Pid", "s"."Abbr", "s"."Address", "s"."Batteries_In_Stock", "s"."Charger_Count", "s"."City", "s"."Close_Time", "s"."Company_Pid", "s"."District_Code", "s"."Gmt_Create", "s"."Gmt_Modified", "s"."Latitude", "s"."Longitude", "s"."Manager", "s"."Name", "s"."Open_Time", "s"."Province", "s"."Remark", "s"."Station_No", "s"."Status", "s"."Tel", "s"."User_Create", "s"."User_Modified"
FROM "charging_station" "s"
WHERE "s"."Station_No" = N'48'Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00942: 表或视图不存在
En fait, cette question est toujours à deux citations drôles, lorsque vous supprimez les guillemets dans la mise en œuvre de l'intérieur PL / SQL, les problèmes ne sont pas. Après avoir ajouté PL / SQL, ils ont signalé la même exception
ORA-00942: table ou vue n'existe pas.
Les solutions sont comme suit (pour référence, je l'espère, il y a d'autres meilleures façons de résoudre ce problème, après toutes les pertes de performance)
Tout d'abord de tous les noms de table et sur le terrain ont souligné _ et tourner la table et les noms de colonnes dans le traitement majuscules
public static string ToSnakeCase(this string input)
{
if (string.IsNullOrEmpty(input)) { return input; }
var startUnderscores = Regex.Match(input, @"^_+");
return startUnderscores + Regex.Replace(input, @"([a-z0-9])([A-Z])", "$1_$2").ToUpper();
}
Table Réaffectation et les noms de colonnes OnModelCreating méthode (vue, index, et peut donc être ainsi traité) puis redéfinies dans une sous-classe de DBContext
public class OracleDBContext : Microsoft.EntityFrameworkCore.DbContext
{
public OracleDBContext(DbContextOptions<OracleDBContext> options) : base(options)
{
}
.....业务表DbSet
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...业务表 modelBuilder.Entity
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
// 重置所有表名
var snakecase = entity.Relational().TableName.ToSnakeCase();
entity.Relational().TableName = snakecase;
// 重置所有列名
foreach (var property in entity.GetProperties())
{
property.Relational().ColumnName = property.Relational().ColumnName.ToSnakeCase();
}
}
}
}