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.

Reply via email to