NickCraver / StackExchange.Exceptional

Error handler used for the Stack Exchange network
https://nickcraver.com/StackExchange.Exceptional/
Apache License 2.0
862 stars 170 forks source link

Add Oracle-Store implementation. #178

Open DerHulk opened 4 years ago

DerHulk commented 4 years ago

Dear Mr Craver, i have implemented a datastore to Oracle-DB. I hope this will help other develpers in future if the need oracle support. Maybe you are interested to include it to your great Exceptional lib. What i don't know is if the oracle licence for the oracle client (Nuget Oracle.ManagedDataAccess.Core) is a problem for the licence of your project.

DerHulk commented 4 years ago

Is something wrong with my pullrequest?

NickCraver commented 4 years ago

@DerHulk Hey there - I just unfortunately haven't had time to sync with Marc on this to investigate some issues. The major issue I see is the way Oracle handles types and since it has no native GUID, we have to convert it. Unfortunately, these type handlers are global in Dapper. This means the library would be changing (and potentially breaking) all other GUID behavior in an application - that's a pretty nasty side-effect and I think we have to find a way to remedy that issue before it's viable to do in a library. This would need changes in Dapper (which we're planning v3 on as time allows) and is likely something that's a dependency here before moving forward.

That issue being what it is, the PR itself is great - adding tests and formats and...just very well done! I'm going to sync with @mgravell this week on ideas.

DerHulk commented 4 years ago

Ok thanks for response, i was't sure that i have missing something. I have seen the problem with the guid-mapping (first i thought i could solve it with the TypeHandler but this was not 100% successfull) but i normally use ef as orm so for me it was not a problem. Hope you find a good solution.

kilroyFR commented 4 years ago

There is other way to fool dapper without changing GUID handler is using a private property (supported by Dapper).

public Guid Foo {get;set;}

public string FooString { get { return Foo.ToString("N"); } set { Foo = new Guid(value); } } And in your query, alias the column as FooString.