Sorry about coming late to the party, but if you use

session.Query<Animal>()
   .Where(x=>x.Age>3)
   .Update(x => new Animal {
Name = "Peter",
Age = x.Age+1,
});

how will you be able to tell when a field needs to be set to null, as the
default of an uninitialized field would also be null?

I also don't see how you could recognize that a non-nullable numeric field
was _not_ being updated, as in:

session.Query<Animal>()
   .Where(x=>x.Age>3)
   .Update(x => new Animal {
Name = "Peter",
});




On Thu, Jan 1, 2015 at 11:17 AM, Gunnar Liljas <gunnar.lil...@gmail.com>
wrote:

> https://github.com/nhibernate/nhibernate-core/pull/391
>
> 2014-12-19 17:46 GMT+01:00 Patrick Earl <hyn...@gmail.com>:
>
>> In our shop we use interfaces for entities exclusively since we have a
>> system that allows for complex inheritance. It would be sad to not have
>> support for interfaces or limited constructor scenarios.
>>
>> What's at the heart the statement that executes? If it's just a matter of
>> setting individual columns perhaps the syntax should reflect that more than
>> pretending like your C# constructor code is going to be called. Doing it on
>> individual properties allows for interfaces, doesn't incorrectly imply that
>> C# code is going to run on insert, and doesn't require the availability of
>> an empty public constructor on a concrete type.
>>
>>      Patrick Earl
>> On Dec 18, 2014 6:02 PM, "Gunnar Liljas" <gunnar.lil...@gmail.com> wrote:
>>
>>> Yes...
>>>
>>> session.Query<Animal>()
>>>    .Where(x=>x.Age>3)
>>>    .Update(x => new Animal {
>>> Name = "Peter",
>>> Age = x.Age+1,
>>> });
>>>
>>> would work! Didn't think of that.
>>>
>>> I'm not completely sold on the "new Animal" part in an update. It looks
>>> linguistically wrong. But it's certainly less verbose. The same problems as
>>> for the Insert also applies.
>>>
>>> /G
>>>
>>>
>>> 2014-12-19 1:54 GMT+01:00 Alexander Zaytsev <haz...@gmail.com>:
>>>>
>>>> What about this:
>>>>
>>>> session.Query<Animal>()
>>>>    .Where(x=>x.Age>3)
>>>>    .Update(x => new Animal {
>>>> y.Name = "Peter",
>>>> y.Age = y.Age+1,
>>>> });
>>>>
>>>> ?
>>>>
>>>> On Fri, Dec 19, 2014 at 1:28 PM, Gunnar Liljas <gunnar.lil...@gmail.com
>>>> > wrote:
>>>>>
>>>>> Absolutely possible, but the (big) difference is that
>>>>>
>>>>> 1. An anonymous object will lose the static type relationship with
>>>>> what you're updating/inserting, which kind of defeats the point of Linq
>>>>> bulk operations.
>>>>> 2. You will lose the possibility to express anything but simple value
>>>>> expressions, i.e "SET FullName = FirstName + ' ' + LastName" (
>>>>> Set(x=>x.FullName,x=>x.FirstName + " " + x.LastName), will not be 
>>>>> possible.
>>>>>
>>>>> /G
>>>>>
>>>>> 2014-12-19 1:20 GMT+01:00 Craig van Nieuwkerk <crai...@gmail.com>:
>>>>>>
>>>>>> Looks nice. But yes, I think if you can have anonymous object for the
>>>>>> parameters this would be better. I have used FluentMigrator and it does
>>>>>> this for Update/Insert pretty nicely.
>>>>>>
>>>>>> On Fri, Dec 19, 2014 at 11:13 AM, Alexander Zaytsev <haz...@gmail.com
>>>>>> > wrote:
>>>>>>>
>>>>>>> Very nice. I would like to remove word "All" from the
>>>>>>> operations.Also why do we need "Set" in update statement?
>>>>>>>
>>>>>>> On Fri, Dec 19, 2014 at 1:04 PM, Ricardo Peres <rjpe...@gmail.com>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Very nice! I implemented strongly typed delete in NH-3488
>>>>>>>> <https://nhibernate.jira.com/browse/NH-3488>, but the syntax was a
>>>>>>>> bit different:
>>>>>>>>
>>>>>>>> session.Delete<Product>(x => x.Price > 100);
>>>>>>>>
>>>>>>>> Do you have a pull request waiting to be issued?
>>>>>>>>
>>>>>>>> RP
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thursday, December 18, 2014 11:21:06 PM UTC, Gunnar Liljas wrote:
>>>>>>>>>
>>>>>>>>> So, now I have completed and old abandoned NH project, to create a
>>>>>>>>> Linq implementation of the bulk functionality. It's complete in the 
>>>>>>>>> sense
>>>>>>>>> that all the unit tests from the HQL implementation passes with the 
>>>>>>>>> Linq
>>>>>>>>> implementation as well, plus a couple more. Before I clean things up, 
>>>>>>>>> I'd
>>>>>>>>> like you input on the syntax.
>>>>>>>>>
>>>>>>>>> Currently it works like this:
>>>>>>>>>
>>>>>>>>> Delete
>>>>>>>>>
>>>>>>>>> session.Query<Animal>()
>>>>>>>>>     .Where(x=>x.Age>3)
>>>>>>>>>     .DeleteAll();
>>>>>>>>>
>>>>>>>>> //all methods returns int (affected rows)
>>>>>>>>>
>>>>>>>>> Update
>>>>>>>>>
>>>>>>>>> session.Query<Animal>()
>>>>>>>>>    .Where(x=>x.Age>3)
>>>>>>>>>    .UpdateAll(x=>x
>>>>>>>>>       .Set(y=>y.Name,"Peter")
>>>>>>>>>       .Set(y=>y.Age,y=>y.Age+1)
>>>>>>>>>     )
>>>>>>>>>
>>>>>>>>> Insert (i.e INSERT SELECT)
>>>>>>>>>
>>>>>>>>> session.Query<Animal>()
>>>>>>>>>    .Where(x=>x.Age>3)
>>>>>>>>>    .InsertInto(x=>new Human{
>>>>>>>>>       Name=x.Name,
>>>>>>>>>       Age=x.Name+10
>>>>>>>>>     })
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> The Delete method was first implemented as
>>>>>>>>> session.Delete<Animal>(x=>x.Age>3), but I added the
>>>>>>>>> IQueryable<T>.DeleteAll extension for consistency.
>>>>>>>>>
>>>>>>>>> I welcome any ideas on how this can be improved/changed.
>>>>>>>>>
>>>>>>>>> /G
>>>>>>>>>
>>>>>>>>  --
>>>>>>>>
>>>>>>>> ---
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "nhibernate-development" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to
>>>>>>>> nhibernate-development+unsubscr...@googlegroups.com.
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>  --
>>>>>>>
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "nhibernate-development" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to nhibernate-development+unsubscr...@googlegroups.com
>>>>>>> .
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>  --
>>>>>>
>>>>>> ---
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "nhibernate-development" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to nhibernate-development+unsubscr...@googlegroups.com.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>  --
>>>>>
>>>>> ---
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "nhibernate-development" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to nhibernate-development+unsubscr...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>  --
>>>>
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "nhibernate-development" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to nhibernate-development+unsubscr...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>  --
>>>
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "nhibernate-development" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to nhibernate-development+unsubscr...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>  --
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "nhibernate-development" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to nhibernate-development+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nhibernate-development" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to nhibernate-development+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
---
Facts do not cease to exist because they are ignored.
*Aldous Huxley*

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhibernate-development+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to