|
Been there! Logging/tracing would have given you insight a bit quicker.
Wout
|
|
|
|
|
I was trying to save some time in the testing as a failure would have been really obvious to spot in test.
Figure that... You'd think I would know better after how many years of doing this.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
That's what unit tests are for, surely?
Debugger based testing is fundamentally limited by the lack of repeatability intrinsic in having a human poking around during the session, whereas automated tests to do the same thing should (if designed correctly) be absolutely repeatable.
As a bonus the tests stick around long after the debug session is ancient history. If someone breaks the code several years from now, the tests will start failing to alert you to that fact.
Anna
Tech Blog | Visual Lint
"Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
|
|
|
|
|
When I first started in a Microsoft position, I asked why they were renaming procedures that were basically doing the same thing. It was their control method, the old procedures retained old behavior, the new code expected new behavior. After the new was promoted to production, the old was removed from SQL. If the lab started squaking, they knew they missed something.
Sure missed that on a later project. About 80% of the existing tests were failing because the sprocs were massively changed and no-one bothered to maintain the tests when they re-wrote the sprocs.
|
|
|
|
|
I think that's the most stupid code I refactored today!
But barely, and there is a lot more!
public XYZ()
{
_xyz = "0 , 0 , 0";
string[] parts = _xyz.Split(',');
Double.TryParse(parts[0], out x);
Double.TryParse(parts[1], out y);
Double.TryParse(parts[2], out z);
}
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station....
_________________________________________________________
My programs never have bugs, they just develop random features.
|
|
|
|
|
public void WriteCode(ICodeContent ctx)
{
throw new BrainNotFoundException();
}
Super Lloyd wrote: A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station....
Where the work stops. Right?
Bob Dole The internet is a great way to get on the net.
2.0.82.7292 SP6a
|
|
|
|
|
You nailed it!
Both remarks!
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station....
_________________________________________________________
My programs never have bugs, they just develop random features.
|
|
|
|
|
Super Lloyd wrote: public XYZ() { _xyz = "0 , 0 , 0";... Looks like someone was planning on getting a string feed and forgot to feed the string or forgot to stop destroying the string.
So what did you do to refactor it? Change code to x=0;y=0;z=0;? And keep _xyz = "0 , 0 , 0";? Remove _xyz = "0 , 0 , 0"; and verify the split causes at least 3 parts? Add error checking on the tryparses? Remove XYZ and all references?
|
|
|
|
|
I got rid of the '_xyz' string, it was only used internally (in addition to x,y,z double) and parse every now and then, to get the value of 'x,y,z'
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station....
_________________________________________________________
My programs never have bugs, they just develop random features.
|
|
|
|
|
|
Ho... I'm learning new power pattern every day!!!
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station....
_________________________________________________________
My programs never have bugs, they just develop random features.
|
|
|
|
|
I wrote this little workaround earlier this year. EF complains about an insert where ParentId is set, but allows me to set it with an update.
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
{
if (newProject.ParentId != null)
{
int parentId = newProject.ParentId.Value;
newProject.ParentId = null;
_projectRepository.Insert(newProject);
newProject.ParentId = parentId;
_projectRepository.Update(newProject);
}
else
{
_projectRepository.Insert(newProject);
}
scope.Complete();
}
|
|
|
|
|
Assuming this is a SQL Server connection, I don't think you can lay this directly at SQL's door, but you might want to see if triggers are involved and see what they do on insert/update. Maybe the update trigger on the child will insert the parentID in the parent table if it doesn't exist?
No, that doesn't make sense, the update should fail with a foreign key constraint failure before it reaches the trigger.
So, when it complains, what is its complaint?
|
|
|
|
|
Something long winded about referential integrity.
|
|
|
|
|
Brady Kelly wrote: Something long winded What else is new with SQL?
|
|
|
|
|
Do you have an insert trigger behind this table in the database by any chance? It would seem to be consistent.
|
|
|
|
|
No. The table is created by EF Code First, nothing but the table itself. Not even indexes but for the PK. I think it's something to do with EF trying to also save another child of the same parent, and clashing somewhere far away.
|
|
|
|
|
|
with EF, it helps you out and takes care of all the FK IDs for you You can fill the nested object and let it handle all the FKs (don't even set the ID properties)
ie:
parentObject.Project = newProject;
_projectRepositroy.Insert(parentObject);
|
|
|
|
|
EF should do that, but somewhere something is amiss - probably my fluent mappings - and I had to resort to the manual update you see in the code excerpt.
|
|
|
|
|
In a project i had to refactor:
if (!string.isNullOrEmpty(User.ToString())) {
}
null.ToString() ?? sweet
|
|
|
|
|
Bob Dole The internet is a great way to get on the net.
2.0.82.7292 SP6a
|
|
|
|
|
I'm not sure I get what's wrong here with the given amount of context (except that ToString probably shouldn't return null...but it certainly could if it's overloaded)
|
|
|
|
|
ToString is an instance method, and if the user variable is null, there will be an unhandled NullReferenceException when the ToString() is called, as you cannot call a method on a null object.
Bob Dole The internet is a great way to get on the net.
2.0.82.7292 SP6a
|
|
|
|
|
Right, but there's no reason to expect it might be null at this piece of code without more context. The previous line could be something that gets that user from a function that always returns an non-null object...I just don't think there's enough information to comment on the code as-is.
|
|
|
|