- 3,715,760 Users
- 2,242,859 Discussions
- 7,845,561 Comments
Forum Stats
Discussions
Categories
- 17 Data
- 362.2K Big Data Appliance
- 7 Data Science
- 1.6K Databases
- 467 General Database Discussions
- 3.7K Java and JavaScript in the Database
- 22 Multilingual Engine
- 487 MySQL Community Space
- 3 NoSQL Database
- 7.6K Oracle Database Express Edition (XE)
- 2.8K ORDS, SODA & JSON in the Database
- 417 SQLcl
- 42 SQL Developer Data Modeler
- 184.9K SQL & PL/SQL
- 21K SQL Developer
- 1.9K Development
- 3 Developer Projects
- 32 Programming Languages
- 135.1K Development Tools
- 9 DevOps
- 3K QA/Testing
- 250 Java
- 5 Java Learning Subscription
- 10 Database Connectivity
- 66 Java Community Process
- 1 Java 25
- 9 Java APIs
- 141.1K Java Development Tools
- 6 Java EE (Java Enterprise Edition)
- 153K Java Essentials
- 135 Java 8 Questions
- 86.2K Java Programming
- 270 Java Lambda MOOC
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 10 Java SE
- 13.8K Java Security
- 3 Java User Groups
- 22 JavaScript - Nashorn
- 18 Programs
- 125 LiveLabs
- 30 Workshops
- 9 Software
- 3 Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 3 Deutsche Oracle Community
- 10 Español
- 1.9K Japanese
- 2 Portuguese
EF Core 3.1 Beta Can't save images in DB

The code works with EF6 and Oracle.ManagedDataAccess.EntityFramework.
With Core 3.1 the following error occurs by saving the context:
An error occurred while updating the entries. See the inner exception for details.
OracleException: ORA-01460: Nicht implementierte oder nicht sinnvolle Umwandlung gefordert
My DB-Set for the images looks like this:
public class Picture
{
public int PictureID { get; set; }
public byte[] Bild { get; set; }
public DateTime Ludsys { get; set; }
public int OrderDetailID { get; set; }
public OrderDetail OrderDetail { get; set; } // Navigationseigenschaft
} // Picture
When I call "Add-Migration" und "Update-DataBase" at the PM-Console the System generates for the byte-array a Column of type RAW instead of BLOB.
Code in .xaml File:
<Image Name="imgBild" Source="{Binding Bild, Converter={StaticResource PhotoConverter}, Mode=TwoWay}" Grid.Row="2"
Height="400" Margin="10,0" HorizontalAlignment="Left" Stretch="Uniform"/>
Code in .xaml.cs File:
...
picture = new Picture
{
Bild = null,
Ludsys = DateTime.Now,
OrderDetail = orderdetail
}; // picture
imgBild.DataContext = picture;
imgBild.Source = FileToBitmapImage(dlg.FileName); // Bild aus Filesystem laden und anzeigen
context.Pictures.Add(picture);
pictures.Add(picture);
ind = pictures.Count - 1; // Index für den neuen Datensatz ist pictures.Count - 1
...
private BitmapImage FileToBitmapImage(string source)
{
try
{
if (source == string.Empty) { return null; }
BitmapImage bitmapimage = new BitmapImage();
using (FileStream filestream = File.Open(source, FileMode.Open))
{
bitmapimage.BeginInit();
bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
bitmapimage.StreamSource = filestream;
bitmapimage.EndInit();
return bitmapimage;
} // using
} // try
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Nachricht", MessageBoxButton.OK, MessageBoxImage.Error);
return null;
} // catch
} // FileToBitmapImage
Code of Converter:
class PhotoConverter : IValueConverter
{
// Convert (Quelle -> Ziel)
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
try
{
if (value == null) { return null; }
byte[] byteArray = (byte[])value;
using (MemoryStream memorystream = new MemoryStream(byteArray))
{
BitmapImage bitmapimage = new BitmapImage();
bitmapimage.BeginInit();
bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
bitmapimage.StreamSource = memorystream;
bitmapimage.EndInit();
return bitmapimage;
} // using
} // try
catch (Exception)
{
return null;
} // catch
} // Convert
// ConvertBack (Ziel -> Quelle)
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
try
{
if (value == null) { return null; }
ImageSource imagesource = (ImageSource)value;
BitmapSource bitmapsource = imagesource as BitmapSource;
BitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapsource));
using (MemoryStream ms = new MemoryStream())
{
encoder.Save(ms);
byte[] bytearray = ms.ToArray();
return bytearray;
} // using
} // try
catch (Exception)
{
return null;
} // catch
} // ConvertBack
} // PhotoConverter
Answers
-
For a byte array, Oracle EF Core migration maps it to a RAW(2000) in the Oracle DB. If you try to update with more than 2K data, I would expect an ORA-012460 to occur. One solution s to change the RAW(2000) to a BLOB by adding the Fluent API: HasMaxLength(x > 2000).
More info on Oracle EF Core data type mapping here: https://docs.oracle.com/en/database/oracle/oracle-data-access-components/19.3/odpnt/EFCoreDataTypeMapping.html#GUID-484E…