I want to insert a default value to the status column in my table when a new record gets created. Here is my Entity class column definition.
Cost.java
#Column(nullable=false)
private FinanceStatusEnum status = FinanceStatusEnum.Inputter;
And this is my DTO definition.
CostDTO.java
#JsonProperty("status")
private FinanceStatusEnum status;
I'm still getting Column 'status' cannot be null error while performing the insert. What's going wrong?
Did you ever try to debug your code to see what is going on? I bet that your DTO just has a null status and you are blindly copying the value over to your entity which then obviously blows up due to your not-null constraint. Just set the default value on the entity in case the value is null before persisting the object.
Related
Save() returns the saved object with wrong attributes, the attribute "price" should return a rounded value.
Let's say I have the following table:
CREATE TABLE OBJ(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) NOT NULL,
DESCRIPTION VARCHAR(200) NOT NULL,
PRICE DECIMAL(10,2) NOT NULL,
);
If I do:
Obj newobj = new Obj("obj name", "brief description", 12.555);
repository.save(newObj);
Looking into the database, the object was saved correctly, so the price saved is 12.56 but method save() has returned the saved object with price = 12.555. Could this behavior be a bug?
Could this behaviour be a bug?
No.
This is the expected behaviour.
The only value that gets returned after it was modified by the database is the id.
If you want such values to get updated you need to require from the database.
When doing so you'll have to makes sure to do so without the entity being in the persistence context, to avoid the 1st level cache to interfere with your attempt to reload the entity.
As far as I understand the problem is about the value stored into the database and in order to fix it you have to replace PRICE DECIMAL(10,2) NOT NULL with PRICE DECIMAL(10,3) NOT NULL. Then the stored value will retain 3 digits after comma.
I'm creating a new record in CRM plugin(by reading the data from a related record) and the data that I'm passing may / may not contain "OptionSetValueCollection". Whenever the value for the OptionSetValueCollection is null the IOrganization.Create is throwing a Generic SQL exception.
Currently I'm checking the submitted value for null and when not null I'm not submitting a value for the created object.
My question is why does OptionSetValueCollection not taking null? Is this a platform issue?
I've also tried creating a List<OptionSetValue> object and adding the incoming OptionSetValues from the OptionSetValueCollection and then passing it to the target attribute, tried passing in null and also used the null-coalescing operator all with no luck.
//Earlybound code
Account account = new Account(){
Name = newBrand,
new_accounttype = new OptionSetValue((int)new_AccountType.Brand),
TerritoryId = siteRequestRecord.new_territoryid,
new_category1 = siteRequestRecord.new_category1 ?? null,
};
if (category2 != null)
{
account.new_category2 = siteRequestRecord.new_category2;
}
service.Create(account);
Seems to be a long outstanding issue.
There is a bug related to multiselect optionset - if you set it to null during creation that will trigger an error. But the same code that sets field to null works fine during update.
So if you set it to null during Create just don't set field value and as a result you'll get blank value of a field.
If I understand you want to set Optionset to null. use below code it shall work and set null for your optionset
new_accounttype = null;
I have mapped a Oracle Table into my entity framework schema. this table contains a nullable number(2) field (PROP). This is the mapping fragment generated by Framework
Public Property PROP() As Nullable(Of Global.System.Int16)
Get
Return _PROP
End Get
Set
OnPROPChanging(value)
ReportPropertyChanging("PROP")
_PROP = StructuralObject.SetValidValue(value, "PROP")
ReportPropertyChanged("PROP")
OnPROPChanged()
End Set
End Property
When I try to set PROP = Nothing, the null value is replaced by 0, and this may cause data inconsistency.
How can I force PROP field to accept the Oracle NULL value?
I have a table name LibraryInfo with these columns
[libraryId] [smallint] IDENTITY(1,1) NOT NULL,
[libraryName] [nvarchar](200) NOT NULL,
[mId] [smallint] NOT NULL,
[description] [nvarchar](300) NULL,
[updatedBy] [int] NOT NULL,
[updatedAt] [datetime] NOT NULL
I have designed a dbml file to access this table and create a method as follows:
public List<LibraryInfo> GetLibraryInfos()
{
var context = new BookDataClassesDataContext(){ ObjectTrackingEnabled = false };
return context.LibraryInfos.ToList();
}
when I call this method 'return context.LibraryInfos.ToList();' shows me 'specified cast is not valid'.
Is there anyone to help me.
You probably changed one of the column data types in your table or view after importing the table/view into your linq model.
Just re-import it so the data types of the auto generated model are the same as the db structure.
The problem seems to be related to the data type you are using. I recommend to use smallint rather than int. I had a similar some time ago, and later realized that querying tables with "int" data type causes the exact same problem. I changed int to Int16 and the problem was solved.
My former answer was obviously not correct. But:
You seem to have a mismatch of types here. ToList() on the context.LibraryInfos table would return a list of LibraryInfos objects (List<LibraryInfos>) instead of List<LibraryInfo>. So either your method needs to be declared as
public List<LibraryInfos> GetLibraryInfos()
or the code that returns the items needs to be changed to
return context.LibraryInfo.ToList();
This really depends on which one you want to return.
On your comment to your question:
context.LibraryInfo.ToList(); gives me error that dbml file does not contain a definition for LibraryInfo
Obviously you only have a LibraryInfos table in your data context. This means that you need to change your method return type to List<LibraryInfos>:
public List<LibraryInfos> GetLibraryInfos()
So the method now reads
public List<LibraryInfos> GetLibraryInfos()
{
var context = new BookDataClassesDataContext(){ ObjectTrackingEnabled = false };
return context.LibraryInfos.ToList();
}
Every item you get from the table has the type that matches the table name, as the LibraryInfos table is actually a collection of items of type LibraryItems.
You may have created a LibraryInfo class just because the compiler complained it didn't exist - you need to decide whether you can delete that from your project (look in solution explorer for LibraryInfo.cs file). But you can not cast between an item from the LibraryInfos table and that LibraryInfo class.
I'm using a Typed DataSet with an Insert statement; I have a table that has a smalldatetime field defined to accept null values. When I insert from a .NET 2.0 FormView, I get a "SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM."
Now, I've read this post, and the parameter as sent to the class constructor is defined as
global::System.Nullable<global::System.DateTime> DoB
So, it looks like it should accept a Nullable obj. Additionally, the generated code is testing the value sent.
if ((DoB.HasValue == true)) {
command.Parameters[6].Value = ((System.DateTime)(DoB.Value));
}
else {
command.Parameters[6].Value = global::System.DBNull.Value;
}
Specifically, the error is occurring when generated SqlClient.SqlCommand.ExecuteScalar() runs:
try {
returnValue = command.ExecuteScalar();
}
So, I guess my question is: how do I use a Typed DataSet to set a blank value (passed from a FormView on CommandName=Insert) to a null in a database?
Ok, so here's what worked for me. First, to reiterate, I've got a Typed DataSet with DataAdapters that's generating the ADO objects. So, on my page, I can create a ObjectDataSource with the type that points to my adapter, and then name the different access methods housed there-in.
No, I have an Insert to a table where basically all the columns are nullable; some varchar, some smalldatetime.
When I submit an empty form, I'd like nulls to be entered. They're not and lots of various errors are thrown. What I ended up doing is subclassing the ObjectDataSource to gain access to the Inserting event. (subclassed for reusability) In the Inserting event, I looped through the InputParameters, and if it was a string and == "", I set it to null. Also, you cannot set ConvertNullToDBNull to true; that causes the strings to fail. This successfully allowed the Nullable to remain null.