<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Форум 'Business Logic Toolkit' на RSDN.RU</title>
    <link>http://www.rsdn.ru/Forum/prj.rfd/</link>
    <description />
    <category>prj</category>
    <category>rfd</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN.ru, 2001-2007</copyright>
    <webMaster>webmaster@rsdn.ru</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://www.rsdn.ru/rsdn.gif</url>
      <title>RSDN.RU</title>
      <link>http://www.rsdn.ru</link>
    </image>
    <lastBuildDate>Mon, 21 May 2012 22:42:35 GMT</lastBuildDate>
    <ttl>5</ttl>
	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rsdn/prj/rfd" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="rsdn/prj/rfd" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Проблема с сохранением одного свойства</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4738755.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4738755.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4738755.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4738755</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4738755.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4738755</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Добрый день.&lt;br /&gt;
У меня имеется некая система позволяющая автоматически сохранять изменения свойств сущностей. Все на тестах простых работало. Потом когда написали много полезного кода и отправли проект на тестирование начали возникать ошибки ствязанные с тем, что на сущностях (в остновном где есть нуловые вторичные ключи) не сохраняются значения свойств с типом int?. Ошибка возникает на столько редко, что единичные тесты ничего не показывают (где-то раз на 3000 итераций), и это очень печально потому что простым дебагом нельзя добиться 100% воспроизведения ошибки. Может кто-то сталкивался с подобными проблемами,  надеюсь знающие люди помогут. &lt;br /&gt;
Полного кода всех модулей позволяющего воспроизвести ошибку не могу выложить в топик, но прилагаю код тех методов где я использую BLToolkit и где возникает ошибка.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Часть кода которая производит апдейт сощностей, здесь важным является формирование sql запроса (метод GetUpdQuery(_entity,out strlog)&lt;img border='0' width='15' height='15' src='http://www.rsdn.ru/Forum/images/wink.gif' /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;var&lt;/span&gt; dbm = _dbManager.DbManager;
                        &lt;span class='kw'&gt;var&lt;/span&gt; query = dbm.GetTable&amp;lt;T&amp;gt;().Where(e =&amp;gt; e.Key == _entity.Key).GetUpdQuery(_entity,&lt;span class='kw'&gt;out&lt;/span&gt; strlog);
                        
                        &lt;span class='kw'&gt;if&lt;/span&gt; (query != &lt;span class='kw'&gt;null&lt;/span&gt;)
                        {
                            query.Update();
                            
                            Log.InfoFormat(&lt;span class='str'&gt;"Entity was updated in db ({0}[{1}])"&lt;/span&gt;, _entity.TypeKey, _entity.Key);
                            &lt;span class='kw'&gt;if&lt;/span&gt; (_entity.TypeKey == TypeKeys.ArmorPart)
                            {
                                Log.Info(&lt;span class='str'&gt;"DBParticle.ArmorUpdated - "&lt;/span&gt; + strlog);
                                Log.Fatal(&lt;span class='str'&gt;"LastUqery:{0}"&lt;/span&gt;, dbm.LastQuery);     
                            }
                        }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Сам метод формирующий запрос&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;public static&lt;/span&gt; IUpdateable&amp;lt;T&amp;gt; GetUpdQuery&amp;lt;T&amp;gt;(&lt;span class='kw'&gt;this&lt;/span&gt; IQueryable&amp;lt;T&amp;gt; query, T entity, &lt;span class='kw'&gt;out string&lt;/span&gt; strLog)&lt;span class='kw'&gt;where&lt;/span&gt; T : &lt;span class='kw'&gt;class&lt;/span&gt;, IGPropertyContainer
        {
            strLog = &lt;span class='kw'&gt;string&lt;/span&gt;.Format(&lt;span class='str'&gt;"GetUpdQuery({0}[{1}]) fields: "&lt;/span&gt;,entity.TypeKey,entity.Key);
            IUpdateable&amp;lt;T&amp;gt; updQuery = &lt;span class='kw'&gt;null&lt;/span&gt;;&lt;span class='com'&gt;// new Extensions.Updateable&amp;lt;T&amp;gt;() { Query = query };&lt;/span&gt;
            
            &lt;span class='kw'&gt;for&lt;/span&gt; (&lt;span class='kw'&gt;int&lt;/span&gt; i = 0; i &amp;lt; entity.Properties.Count; i++)
            {
                IGProperty prop = entity.Properties[i];
                &lt;span class='kw'&gt;if&lt;/span&gt; (!((IEditable)prop).IsDirty) &lt;span class='kw'&gt;continue&lt;/span&gt;;

                &lt;span class='kw'&gt;var&lt;/span&gt; t = TypeAccessor.GetAccessor(&lt;span class='kw'&gt;typeof&lt;/span&gt;(T));
                &lt;span class='kw'&gt;var&lt;/span&gt; ma = ExprMemberAccessor.GetMemberAccessor(t, prop.Name);


                &lt;span class='kw'&gt;var&lt;/span&gt; metaMember = ExtMetadataHelper.GetMetaMemberAccessor(ma);

                &lt;span class='kw'&gt;var&lt;/span&gt; attr1 = metaMember.GetAttribute&amp;lt;SqlIgnoreAttribute&amp;gt;();
                &lt;span class='kw'&gt;if&lt;/span&gt; (attr1 != &lt;span class='kw'&gt;null&lt;/span&gt;) &lt;span class='kw'&gt;continue&lt;/span&gt;;

                &lt;span class='kw'&gt;var&lt;/span&gt; attr2 = metaMember.GetAttribute&amp;lt;NonUpdatableAttribute&amp;gt;();
                &lt;span class='kw'&gt;if&lt;/span&gt; (attr2 != &lt;span class='kw'&gt;null&lt;/span&gt;) &lt;span class='kw'&gt;continue&lt;/span&gt;;
                
                strLog += &lt;span class='kw'&gt;string&lt;/span&gt;.Format(&lt;span class='str'&gt;"{0}={1}, "&lt;/span&gt;, prop.Name,prop.Value);
               

                &lt;span class='kw'&gt;if&lt;/span&gt; (updQuery == &lt;span class='kw'&gt;null&lt;/span&gt;)
                    updQuery = query.AddSet(prop);
                &lt;span class='kw'&gt;else&lt;/span&gt;
                    updQuery = updQuery.AddSet(prop);
            }
            
            &lt;span class='kw'&gt;return&lt;/span&gt; updQuery;
        }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;if&lt;/span&gt; (updQuery == null)
                    updQuery = query.AddSet(prop);
                &lt;span class='kw'&gt;else&lt;/span&gt;
                    updQuery = updQuery.AddSet(prop);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
 &lt;i&gt;- такой код связан сособенностями реализации в BLToolkit для разных интефейсов для IQueryable&amp;lt;T&amp;gt; и IUpdateable&amp;lt;T&amp;gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Собственно сами методы которые добавляют выражение Set в запрос для разных сорсов IQueryable&amp;lt;T&amp;gt; и IUpdateable&amp;lt;T&amp;gt;&lt;/i&gt;&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;public static&lt;/span&gt; IUpdateable&amp;lt;T&amp;gt; AddSet&amp;lt;T&amp;gt;(&lt;span class='kw'&gt;this&lt;/span&gt; IUpdateable&amp;lt;T&amp;gt; query, IGProperty prop)
            &lt;span class='kw'&gt;where&lt;/span&gt; T : &lt;span class='kw'&gt;class&lt;/span&gt;, IGPropertyContainer
        {
            ParameterExpression entityParam = Expression.Parameter(&lt;span class='kw'&gt;typeof&lt;/span&gt;(T), &lt;span class='str'&gt;"entity"&lt;/span&gt;);
            IEnumerable&amp;lt;MethodInfo&amp;gt; methods =
                &lt;span class='kw'&gt;from method in typeof&lt;/span&gt;(Extensions).GetMethods(BindingFlags.Public | BindingFlags.Static)
                &lt;span class='kw'&gt;let&lt;/span&gt; parameters = &lt;span class='kw'&gt;method&lt;/span&gt;.GetParameters()
                &lt;span class='kw'&gt;let&lt;/span&gt; genParams = &lt;span class='kw'&gt;method&lt;/span&gt;.GetGenericArguments()
                &lt;span class='kw'&gt;where method&lt;/span&gt;.Name == &lt;span class='str'&gt;"Set"&lt;/span&gt; &amp;amp;&amp;amp;
                      &lt;span class='kw'&gt;method&lt;/span&gt;.ContainsGenericParameters &amp;amp;&amp;amp;
                      parameters.Length == 3 &amp;amp;&amp;amp;
                      parameters[0].ParameterType.GetGenericTypeDefinition() == &lt;span class='kw'&gt;typeof&lt;/span&gt;(IUpdateable&amp;lt;&amp;gt;) &amp;amp;&amp;amp;
                      parameters[2].ParameterType.BaseType == &lt;span class='kw'&gt;typeof&lt;/span&gt;(&lt;span class='kw'&gt;object&lt;/span&gt;)
                &lt;span class='kw'&gt;select method&lt;/span&gt;;
            MethodInfo miSet = methods.FirstOrDefault().MakeGenericMethod(&lt;span class='kw'&gt;new&lt;/span&gt;[] { &lt;span class='kw'&gt;typeof&lt;/span&gt;(T), prop.ValueType });
            MemberExpression propExpr = Expression.PropertyOrField(entityParam, prop.Name);
            Expression propertyAccess = Expression.Lambda(propExpr, entityParam);
            &lt;span class='kw'&gt;var&lt;/span&gt; result = (IUpdateable&amp;lt;T&amp;gt;)miSet.Invoke(&lt;span class='kw'&gt;null&lt;/span&gt;, &lt;span class='kw'&gt;new&lt;/span&gt;[] { query, propertyAccess, prop.Value });
            &lt;span class='kw'&gt;return&lt;/span&gt; result;
        }

        &lt;span class='kw'&gt;public static&lt;/span&gt; IUpdateable&amp;lt;T&amp;gt; AddSet&amp;lt;T&amp;gt;(&lt;span class='kw'&gt;this&lt;/span&gt; IQueryable&amp;lt;T&amp;gt; query, IGProperty prop)
            &lt;span class='kw'&gt;where&lt;/span&gt; T : &lt;span class='kw'&gt;class&lt;/span&gt;, IGPropertyContainer
        {
            ParameterExpression entityParam = Expression.Parameter(&lt;span class='kw'&gt;typeof&lt;/span&gt;(T), &lt;span class='str'&gt;"entity"&lt;/span&gt;);
            IEnumerable&amp;lt;MethodInfo&amp;gt; methods =
                &lt;span class='kw'&gt;from method in typeof&lt;/span&gt;(Extensions).GetMethods(BindingFlags.Public | BindingFlags.Static)
                &lt;span class='kw'&gt;let&lt;/span&gt; parameters = &lt;span class='kw'&gt;method&lt;/span&gt;.GetParameters()
                &lt;span class='kw'&gt;let&lt;/span&gt; genParams = &lt;span class='kw'&gt;method&lt;/span&gt;.GetGenericArguments()
                &lt;span class='kw'&gt;where method&lt;/span&gt;.Name == &lt;span class='str'&gt;"Set"&lt;/span&gt; &amp;amp;&amp;amp;
                      &lt;span class='kw'&gt;method&lt;/span&gt;.ContainsGenericParameters &amp;amp;&amp;amp;
                      parameters.Length == 3 &amp;amp;&amp;amp;
                      parameters[0].ParameterType.GetGenericTypeDefinition() == &lt;span class='kw'&gt;typeof&lt;/span&gt;(IQueryable&amp;lt;&amp;gt;) &amp;amp;&amp;amp;
                      parameters[2].ParameterType.BaseType == &lt;span class='kw'&gt;typeof&lt;/span&gt;(&lt;span class='kw'&gt;object&lt;/span&gt;)
                &lt;span class='kw'&gt;select method&lt;/span&gt;;
            MethodInfo miSet = methods.FirstOrDefault().MakeGenericMethod(&lt;span class='kw'&gt;new&lt;/span&gt;[] { &lt;span class='kw'&gt;typeof&lt;/span&gt;(T), prop.ValueType });
            MemberExpression propExpr = Expression.PropertyOrField(entityParam, prop.Name);
            Expression propertyAccess = Expression.Lambda(propExpr, entityParam);
            &lt;span class='kw'&gt;var&lt;/span&gt; result = (IUpdateable&amp;lt;T&amp;gt;)miSet.Invoke(&lt;span class='kw'&gt;null&lt;/span&gt;, &lt;span class='kw'&gt;new&lt;/span&gt;[] { query, propertyAccess, prop.Value });
            &lt;span class='kw'&gt;return&lt;/span&gt; result;
        }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
эти методы отличаются лиш одной строчкой &lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
parameters[0].ParameterType.GetGenericTypeDefinition() == typeof(IUpdateable&amp;lt;&amp;gt;) &amp;amp;&amp;amp;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;.&lt;br /&gt;
&lt;br /&gt;
Код метода теста который воспроизводит ошибку &lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;public void&lt;/span&gt; UpdateOneNullableIntPropertyTest(&lt;span class='kw'&gt;int&lt;/span&gt; index)
        {
            &lt;span class='kw'&gt;var&lt;/span&gt; dbm = &lt;span class='kw'&gt;new&lt;/span&gt; DBAccess.GenericDBManager&amp;lt;TestEntity&amp;gt;();
            &lt;span class='kw'&gt;var&lt;/span&gt; testEntity = dbm.Table.FirstOrDefault(te =&amp;gt; te.StringField == &lt;span class='str'&gt;"TestString"&lt;/span&gt;);
            &lt;span class='kw'&gt;var&lt;/span&gt; intValue = (&lt;span class='kw'&gt;new&lt;/span&gt; Random()).Next(1000);
            &lt;span class='com'&gt;//testEntity.IntField = intValue;&lt;/span&gt;
            &lt;span class='kw'&gt;if&lt;/span&gt; ((intValue % 2) == 1)
                testEntity.IntNullField = &lt;span class='kw'&gt;null&lt;/span&gt;;
            &lt;span class='kw'&gt;else&lt;/span&gt;
                testEntity.IntNullField = testEntity.IntField;
            
            DBParticle&amp;lt;TestEntity&amp;gt; dbParticle = &lt;span class='kw'&gt;new&lt;/span&gt; DBParticle&amp;lt;TestEntity&amp;gt;(testEntity, dbm);
            dbParticle.Store();
            Console.Out.WriteLine(dbm.DbManager.LastQuery);
            Debug.WriteLine(dbm.DbManager.LastQuery);
            &lt;span class='kw'&gt;var&lt;/span&gt; existendEntity = Get&amp;lt;TestEntity&amp;gt;(testEntity.Key);
            Assert.IsTrue(testEntity.Equals(existendEntity),&lt;span class='str'&gt;"Iteration="&lt;/span&gt;+intValue.ToString());
        }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
если раскомментировать строчку &lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='com'&gt;//testEntity.IntField = intValue;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
 ошибка не воспроизводится.&lt;br /&gt;
&lt;br /&gt;
Еще приложу две вырезки из лога когда одна и таже сущность сохранялась в базу с двумя измененными свойствами и с одним.&lt;br /&gt;
К примеру вот часть кода&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='com'&gt;//armorPart.CurrentDurability--; armorPart.CurrentDurability++;&lt;/span&gt;
 armorPart.ArmorID = Key;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
если раскоментировать первую строчку лог последнего sql запроса выдает результат &lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
UPDATE
                            [e]
                        SET
                            [ArmorID] = @p1,
                            [CurrentDurability] = 48
                        FROM
                            [ConcreteArmorParts] [e]
                        WHERE
                            [e].[CArmorPartID] = @Key1&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
при закоментированной первой строчке sql имеет следующий вид&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
UPDATE
                                    [e]
                            SET
                                    [ArmorID] = NULL
                            FROM
                                    [ConcreteArmorParts] [e]
                            WHERE
                                    [e].[CArmorPartID] = @Key1&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Извините за столь обширное описание проблемы.&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Tue, 15 May 2012 10:05:14 GMT</pubDate>
		
			<author>mad_net &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>как правильно работать с MySql?</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4738639.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4738639.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4738639.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4738639</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4738639.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4738639</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;добавил в проект MySql.ttinclude, BLToolkit.ttinclude, создал tt файл, сгенерировал класс с моделями&lt;br /&gt;
&lt;br /&gt;
пытаюсь выполнить код &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;  &lt;span class='kw'&gt;private static void&lt;/span&gt; tets1()
        {
            &lt;span class='kw'&gt;var&lt;/span&gt; db = &lt;span class='kw'&gt;new&lt;/span&gt; DataModel();
            &lt;span class='kw'&gt;var&lt;/span&gt; ll = db.adminmenu;
            &lt;span class='kw'&gt;foreach&lt;/span&gt; (&lt;span class='kw'&gt;var&lt;/span&gt; item &lt;span class='kw'&gt;in&lt;/span&gt; ll)
            {
                Console.WriteLine(item.Title);
            }
        }
        &lt;span class='kw'&gt;static void&lt;/span&gt; test2()
        {
            &lt;span class='kw'&gt;using&lt;/span&gt; (&lt;span class='kw'&gt;var&lt;/span&gt; db = &lt;span class='kw'&gt;new&lt;/span&gt; DbManager(&lt;span class='str'&gt;"MySql"&lt;/span&gt;))
            {
                &lt;span class='kw'&gt;var&lt;/span&gt; query = &lt;span class='kw'&gt;new&lt;/span&gt; SqlQuery&amp;lt;adminmenu&amp;gt;();
                &lt;span class='kw'&gt;foreach&lt;/span&gt; (&lt;span class='kw'&gt;var&lt;/span&gt; item &lt;span class='kw'&gt;in&lt;/span&gt; query.SelectAll())
                {
                    Console.WriteLine(item.Title);
                }
            }
        }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
не подключается к базе, как правильно указать конекшен, чтобы хоть что то вывело на экран&lt;br /&gt;
&lt;br /&gt;
в app.config добавил конекшен стринг&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&amp;lt;connectionStrings&amp;gt;
    &amp;lt;&lt;span class='kw'&gt;add&lt;/span&gt; name=&lt;span class='str'&gt;"MySql"&lt;/span&gt; connectionString=&lt;span class='str'&gt;"Server=localhost;Port=3306;Database=***;Uid=root;pwd=***;"&lt;/span&gt; providerName=&lt;span class='str'&gt;"MySql.Data.MySqlClient"&lt;/span&gt;/&amp;gt;
  &amp;lt;/connectionStrings&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Tue, 15 May 2012 08:49:17 GMT</pubDate>
		
			<author>kkolyan &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Вопрос по использованию параметров в запросах</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4727369.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4727369.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4727369.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4727369</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4727369.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4727369</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Есть запросы, анпример на вставку, вида:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
messageId = ... ;
db.GetTable&amp;lt;User&amp;gt;().Insert(db.GetTable&amp;lt;UserMessage&amp;gt;(), x =&amp;gt; &lt;span class='kw'&gt;new&lt;/span&gt; Entities.UserMessage
            {
                UserId = x.Id,
                MessageId = messageId,
            });&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
они генерируют такой sql&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;INSERT INTO&lt;/span&gt; t_user_message 
(
    user_id,
    message_id
)
&lt;span class='kw'&gt;SELECT&lt;/span&gt;
    t1.user_id &lt;span class='kw'&gt;as&lt;/span&gt; Id,
    &lt;b&gt;459&lt;/b&gt; &lt;span class='kw'&gt;as&lt;/span&gt; c1
&lt;span class='kw'&gt;FROM&lt;/span&gt;
    t_user t1&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
таким образом выделенное не передается как параметр sql запроса а идет как часть sql текста. &lt;br /&gt;
&lt;br /&gt;
вопрос: почему? &lt;br /&gt;
&lt;br /&gt;
есть еще ряд запросов где генерируются константы в тексте, например в таком:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
db.GetTable&amp;lt;Message&amp;gt;().Skip(&lt;span class='kw'&gt;from&lt;/span&gt;).Take(size)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
sql запрос будет выглядеть примерно так:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
...
    ) t
    &lt;span class='kw'&gt;WHERE&lt;/span&gt;
        ROWNUM &amp;lt;= &lt;b&gt;120&lt;/b&gt;
) t5
&lt;span class='kw'&gt;WHERE&lt;/span&gt;
    t5.rn &amp;gt; &lt;b&gt;110&lt;/b&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
з.ы. эт я к чему спрашиваю: для БД по идее все запросы выглядят разные т.к. не используются парамтры со всеми вытекающими полными разборами и прочее...&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Sun, 06 May 2012 08:09:33 GMT</pubDate>
		
			<author>AK107 &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Ошибка генерации linq2sql выражения</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4709699.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4709699.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4709699.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4709699</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4709699.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4709699</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Следующий код (C#.NET 4.0, BLToolkit 4.1, MySql 5.1):&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;var&lt;/span&gt; v = &lt;span class='kw'&gt;from&lt;/span&gt; c &lt;span class='kw'&gt;in&lt;/span&gt; db.GetTable&amp;lt;Country&amp;gt;()
        &lt;span class='kw'&gt;join&lt;/span&gt; t0 &lt;span class='kw'&gt;in&lt;/span&gt; db.GetTable&amp;lt;Team&amp;gt;() &lt;span class='kw'&gt;on&lt;/span&gt; c.Id &lt;span class='kw'&gt;equals&lt;/span&gt; t0.CountryId &lt;span class='kw'&gt;into&lt;/span&gt; t1
        &lt;span class='kw'&gt;from&lt;/span&gt; team &lt;span class='kw'&gt;in&lt;/span&gt; t1.DefaultIfEmpty()
        &lt;span class='kw'&gt;group&lt;/span&gt; team &lt;span class='kw'&gt;by&lt;/span&gt; c.Id &lt;span class='kw'&gt;into&lt;/span&gt; teamsGrouped
        &lt;span class='kw'&gt;select new&lt;/span&gt; CountryTeamsInfo
            {
                CountryId = teamsGrouped.Key,
                TeamsTotal = teamsGrouped.Count(),
                &lt;span class='com'&gt;// TeamsWithoutOwnerFree = teamsGrouped.Count(t =&amp;gt; t.OwnerId==0)&lt;/span&gt;
            }
            ;
         List&amp;lt;CountryTeamsInfo&amp;gt; res = v.ToList();&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Генерирует следующую кверю:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;SELECT&lt;/span&gt; c.Id, &lt;span class='kw'&gt;Count&lt;/span&gt;(*) &lt;span class='kw'&gt;as&lt;/span&gt; c1
&lt;span class='kw'&gt;FROM&lt;/span&gt; countries c
&lt;span class='kw'&gt;LEFT JOIN&lt;/span&gt; teams t1 &lt;span class='kw'&gt;ON&lt;/span&gt; c.Id = t1.Country
&lt;span class='kw'&gt;GROUP BY&lt;/span&gt; c.Id&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Фактически, мне нужно получить не только количество объектов в присоединенной таблице, но также число объектов, у которых нет владельцев (OwnerId==0). В теории, мне должно было бы быть достаточно раскомментировать строку, которая это вычисляет, но выполнение такого кода вызывает ошибку:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;The given key was not present in the dictionary&lt;/p&gt;&lt;/blockquote&gt;
При этом, кверя не попадает в профайлер базы данных, и я не могу понять, что именно генерируется.&lt;br /&gt;
&lt;br /&gt;
Аналогичный код, примененный к такой же структуре таблиц MSSQL через Entity Framework работает как положенно.&lt;br /&gt;
&lt;br /&gt;
Подскажите, пожалуйста, в чем проблема: я что-то делаю не так (как правильнО)? или бага внутри Bltoolkit'а (реально ли пофиксить)?&lt;br /&gt;
&lt;br /&gt;
Заранее большое спасибо!&lt;br /&gt;
&lt;br /&gt;
Я нашел, как обойти проблему, но получилось через Ж:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;var&lt;/span&gt; v = db.GetTable&amp;lt;Country&amp;gt;().Where(country =&amp;gt; country.Allowed)
                    .GroupJoin(
                        db.GetTable&amp;lt;Team&amp;gt;(),
                        country =&amp;gt; country.Id,
                        team =&amp;gt; team.CountryId,
                        (country, teams) =&amp;gt; &lt;span class='kw'&gt;new&lt;/span&gt; CountryTeamsInfo
                                                {
                                                    CountryId = country.Id,
                                                    TeamsTotal = teams.Count(),
                                                    TeamsWithoutOwnerFree = teams.Count(t =&amp;gt; t.OwnerId != 0),
                                                }
                    ).GroupJoin(
                        db.GetTable&amp;lt;Team&amp;gt;().Where(te=&amp;gt;te.OwnerId==0),
                        cti =&amp;gt; cti.CountryId,
                        team =&amp;gt; team.CountryId,
                        (cti, teams) =&amp;gt; &lt;span class='kw'&gt;new&lt;/span&gt; CountryTeamsInfo
                        {
                            CountryId = cti.CountryId,
                            TeamsTotal = cti.TeamsTotal,
                            TeamsWithoutOwnerFree = teams.Count(t =&amp;gt; t.OwnerId != 0),
                        }
                    )
                    ;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;SELECT&lt;/span&gt;
cti.Id &lt;span class='kw'&gt;as&lt;/span&gt; Id1,
cti.c1 &lt;span class='kw'&gt;as&lt;/span&gt; c11,
(
    &lt;span class='kw'&gt;SELECT
        Count&lt;/span&gt;(*)
    &lt;span class='kw'&gt;FROM&lt;/span&gt;
        teams te
    &lt;span class='kw'&gt;WHERE&lt;/span&gt;
        cti.Id = te.Country &lt;span class='kw'&gt;AND&lt;/span&gt; te.&lt;span class='kw'&gt;User&lt;/span&gt; = 0
) &lt;span class='kw'&gt;as&lt;/span&gt; c2
&lt;span class='kw'&gt;FROM&lt;/span&gt;
(
    &lt;span class='kw'&gt;SELECT&lt;/span&gt;
        country.Id,
        (
            &lt;span class='kw'&gt;SELECT
                Count&lt;/span&gt;(*)
            &lt;span class='kw'&gt;FROM&lt;/span&gt;
                teams t1
            &lt;span class='kw'&gt;WHERE&lt;/span&gt;
                country.Id = t1.Country
        ) &lt;span class='kw'&gt;as&lt;/span&gt; c1
    &lt;span class='kw'&gt;FROM&lt;/span&gt;
        countries country
    &lt;span class='kw'&gt;WHERE&lt;/span&gt;
        country.allow&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Fri, 20 Apr 2012 01:08:01 GMT</pubDate>
		
			<author>_Budda_ &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Странный left join</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4700433.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4700433.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4700433.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4700433</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4700433.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4700433</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Всем доброго времени суток!&lt;br /&gt;
&lt;br /&gt;
Есть вот такой linq запрос:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
from sv in db.GetTable&amp;lt;SectionValue&amp;gt;()
join mo in db.GetTable&amp;lt;MonitoringObject&amp;gt;() on sv.MonitoringObjectId equals mo.Id into gr
from mo in gr.DefaultIfEmpty()
select select new {sv, mo};&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Никаких специфических полей у этих сущностей нет. Единственное, у сущности&lt;br /&gt;
MonitoringObject есть строковое поле "Code". В принципе тоже ничего особенного &lt;br /&gt;
в этом свойстве нет. В базе (Oracle) оно объявлено как Nullable.&lt;br /&gt;
Вся странность результата запроса заключается в том, что MonitoringObject-ы&lt;br /&gt;
(которые соответствуют существующим SectionValue) с не заполненным полем "Code"&lt;br /&gt;
выводятся как null. Причем такая странная реакция только на поле "Code" &lt;br /&gt;
(с другими названиями все работает должным образом).&lt;br /&gt;
&lt;br /&gt;
При этом если применить сгенерированный SQL запрос напрямую к таблицам БД,&lt;br /&gt;
то результат будет правильный.&lt;br /&gt;
&lt;br /&gt;
Более того такая ситуация только с linq-ым LEFT JOIN. Linq запрос&lt;br /&gt;
с INNER JOIN работает верно.&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
from sv in db.GetTable&amp;lt;SectionValue&amp;gt;()
join mo in db.GetTable&amp;lt;MonitoringObject&amp;gt;() on sv.MonitoringObjectId equals mo.Id
select select new {sv, mo};&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Возможно, слово "Code" где-то зарезервировано в самом ORM.&lt;br /&gt;
Хотелось бы понять, в чем дело, и возможно ли исправить ситуацию&lt;br /&gt;
малой кровью.&lt;br /&gt;
Заранее спасибо.&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Fri, 13 Apr 2012 06:26:40 GMT</pubDate>
		
			<author>MuxMux &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Mapping ассоциаций - как сделать проще ?</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4699848.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4699848.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4699848.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4699848</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4699848.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4699848</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
class objA {
  int ID {get;set;}
  string Name {get;set;}
  
  int b_ID {get;set;}

  [Associtiation(ThisKey = "b_ID", OtherKey = "ID")]
  objB B {get;set;} 

  int c_ID {get;set;}

 [Associtiation(ThisKey = "c_ID", OtherKey = "ID")]
  objC C {get;set;} 


  List&amp;lt;objX&amp;gt; ListOfX{get;set;}

  ...
}

class objB{
     int ID {get;set;}
     string Name {get;set;}
     ...
}

class objC{
     int ID {get;set;}
     string Name {get;set;}
}

...&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
хочется упростить написание загрузки ассоциаций (напр B и C в классе objA)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
по документации маппинг загрузка ассоц. свойств выглядит как :&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
from a in GetTable&amp;lt;objA&amp;gt;()
seleсt new objA(a){B=a.B, C = a.C};&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
минусы кот видны сразу же  &amp;mdash; создается два инстанса objA&lt;br /&gt;
для каждого класса надо писать два конструктора &amp;mdash; пустой и с копированием полей  &lt;br /&gt;
  или писать простыню типа new objA(){Id= a.ID,Name = a.Name, b_ID = a.b_ID, B = a.B, ......} &amp;mdash; можно сразу застрелиться если много классов в модели , и в каждом классе тоже не по 2-3 свойства&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
попытки написать простеький extension типа &lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
  T MapProp&amp;lt;T&amp;gt;(this T item, Expression&amp;lt;Func&amp;lt;T,object&amp;gt;&amp;gt; map, object value){
     string  mapname = ((MemberExpression)map.Body).Member.Name;
     typeof(T).Property(mapname).SetValue(item,value);
     return item;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
c соответсвующим вызовом &lt;br /&gt;
&lt;br /&gt;
from a in GetTable&amp;lt;objA&amp;gt;()&lt;br /&gt;
select a.MapProp((x)=&amp;gt;x.B , a.B)&lt;br /&gt;
&lt;br /&gt;
думалось что все получится и будет щастьЕ &amp;mdash; не сложилось &amp;mdash; BLT попытался видимо все это запихнуть в сиквел и соотвественно сломался на построение дерева выражений&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;вопрос в студию&lt;/b&gt; &amp;mdash; можно ли с минимальным кол-вом телодвижений, не изобретая велосипед сделать что нибудь подобное, может быть  в стиле &lt;br /&gt;
EntityFrameworka :   &lt;br /&gt;
      from a in db.objA &lt;br /&gt;
      select a&lt;br /&gt;
           .Include(x=&amp;gt;x.B)  &lt;br /&gt;
           .Include(x=&amp;gt;x.C.D.E) &amp;mdash; сдесь тоже  грузятся все вложенные свойва&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Просто может кто то озадачивался написанием с помощью BLT ,что то вроде UnitOfWork напр такого плана &lt;br /&gt;
class DAL&amp;lt;T&amp;gt; {  &lt;br /&gt;
  List&amp;lt;T&amp;gt; Select&amp;lt;T&amp;gt;(Predicate filter,  "Выражение для указания загрузки вложенных св-ва"  includeProps )  &lt;br /&gt;
   {  &lt;br /&gt;
    using (dbManager ){&lt;br /&gt;
      // какой нибудь кусок бизнес логики&lt;br /&gt;
       ...&lt;br /&gt;
      // может быть часть конечного запроса  &lt;br /&gt;
      var qry = from a in db.A select a where a.SomeDate&amp;gt; DateTime.Now.AddYear(-1);&lt;br /&gt;
      &lt;br /&gt;
     //встраиваем фильтр напр так&lt;br /&gt;
      qry = qry.Where(filter);&lt;br /&gt;
      &lt;br /&gt;
      // загрузка ассоциаций &lt;br /&gt;
      //всегда грузим свойсво Z&lt;br /&gt;
      qry = qry.Include(x=&amp;gt;x.Z);&lt;br /&gt;
&lt;br /&gt;
      //грузим по требованию&lt;br /&gt;
      foreach (var i in includeProps )&lt;br /&gt;
       qry = qry.Include(i)&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
      return  qry.ToList()&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
соответсвенно на клиенте можно было бы использовать как например &lt;br /&gt;
1.  DAL&amp;lt;SomeData&amp;gt;Select( (sd)=&amp;gt;sd.Number&amp;gt;10 ,  "Prop1;Prop2;Prop3") &lt;br /&gt;
2.    DAL&amp;lt;SomeData&amp;gt;Select( (sd)=&amp;gt;sd.Number&amp;gt;10 ,  (sd)=&amp;gt;sd.Prop1,  (sd)=&amp;gt;sd.Prop2,  (sd)=&amp;gt;sd.ListPropA,  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(при этом точно зная что данные только за последний год , что поле Z всегда загужено &amp;mdash; указаи его или нет)&lt;br /&gt;
&lt;br /&gt;
может у кого то есть мысли по поводу как это попроще организовать ?&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Thu, 12 Apr 2012 16:45:33 GMT</pubDate>
		
			<author>mk76 &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>ODBC и BLToolkit</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4697908.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4697908.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4697908.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4697908</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4697908.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4697908</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Есть класс:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;public abstract class&lt;/span&gt; MyAccessor: DataAccessor
{
    [SprocName(&lt;span class='str'&gt;"GetMyStuff"&lt;/span&gt;)]
    &lt;span class='kw'&gt;public abstract&lt;/span&gt; List&amp;lt;MyRow&amp;gt; GetMyStuff(&lt;span class='kw'&gt;int&lt;/span&gt; tmp);
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Его использование:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;using&lt;/span&gt; (DbManager db = &lt;span class='kw'&gt;new&lt;/span&gt; DbManager(&lt;span class='kw'&gt;new&lt;/span&gt; BLToolkit.Data.DataProvider.OdbcDataProvider(), myConnectionString))
{
    MyAccessor accessor = DataAccessor.CreateInstance&amp;lt;MyAccessor&amp;gt;(db);
    List&amp;lt;MyRow&amp;gt; details = accessor.GetMyStuff(1);
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Ошибка:&lt;br /&gt;
[NotSupportedException] Specified method is not supported.&lt;br /&gt;
&lt;br /&gt;
Возникает здесь:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;OdbcDataProvider.cs&lt;/b&gt;&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;public override&lt;/span&gt; ISqlProvider CreateSqlProvider()
{
    &lt;span class='kw'&gt;throw new&lt;/span&gt; NotSupportedException();
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Этот метод вызывается отсюда:&lt;br /&gt;
&lt;b&gt;DataProviderBase.cs&lt;/b&gt;&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;public virtual object&lt;/span&gt; Convert(&lt;span class='kw'&gt;object value&lt;/span&gt;, ConvertType convertType)
{
    &lt;span class='kw'&gt;return&lt;/span&gt; SqlProvider.Convert(&lt;span class='kw'&gt;value&lt;/span&gt;, convertType);
}
Где &lt;span class='kw'&gt;value&lt;/span&gt; = &lt;span class='str'&gt;"tmp"&lt;/span&gt;, convertType = NameToCommandParameter&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Как я понимаю, это не должно работать никаким образом. У кого-нибудь получалось вызвать хранимку MS SQL через ODBC-подключение?&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Wed, 11 Apr 2012 14:39:50 GMT</pubDate>
		
			<author>danclax &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Дублирующиеся sqlQuery.Parameters</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4696103.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4696103.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4696103.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4696103</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4696103.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4696103</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Описание среды:&lt;br /&gt;
В своем проекте мы используем BLToolkit в качестве ORM для локальной БД Silverlight клиента (DB: SQLite, DataProvider: CSharp-Sqlite).&lt;br /&gt;
&lt;br /&gt;
Описание ситуации:&lt;br /&gt;
При построении некоторых linq запросов (например, включающих в себя StringField.ToLower() == "abc"), на вход DbManager.ExecuteReader приходит QueryContext с дублирующимися параметрами.&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
  &lt;span class='kw'&gt;var&lt;/span&gt; parameters = sqlQuery.IsParameterDependent
                    ? sqlQuery.Parameters.ToArray()
                    : query.GetParameters();

  &lt;span class='kw'&gt;foreach&lt;/span&gt; (&lt;span class='kw'&gt;var&lt;/span&gt; parameter &lt;span class='kw'&gt;in&lt;/span&gt; parameters)
  {
      &lt;span class='kw'&gt;var&lt;/span&gt; cmdParam = DataProvider.CreateParameterObject(cmd);
      cmdParam.ParameterName = parameter.Key;
      cmdParam.Value = parameter.Value;
      DataProvider.AttachParameter(cmd, cmdParam);
  }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, при попытке добавить эти параметры к SqlCommand вылетает эксепшн дублирующихся параметров.&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Tue, 10 Apr 2012 11:51:28 GMT</pubDate>
		
			<author>shakirov.ruslan &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Вопрос по TPT Наследованию</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4694695.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4694695.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4694695.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4694695</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4694695.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4694695</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Добрый день всем , проясните пожалйста ситуацию ,&lt;br /&gt;
&lt;a href="https://docs.google.com/spreadsheet/ccc?key=0AtMUz5Z1OXjudFFnM1h6Rl9vSHlrcklDMlgzM0FodEE&amp;amp;hl=en#gid=0" class="m" target="_blank"&gt;здесь в 87 строке&lt;/a&gt; сказано что наследование TPT есть,&lt;br /&gt;
&lt;a href="http://www.rsdn.ru/forum/prj.rfd/4034997.all.aspx" title="Возможности Business Logic Toolkit" class=" tips m" rel="#m4034997" target="_blank"&gt;Здесь&lt;div class="tooltip" id="m4034997"&gt;Автор: SkySandy&lt;br /&gt;Дата: 12.11.10&lt;/div&gt;&lt;/a&gt; судя по по описанию классов тоже упоминается (и возможно у кого-то даже работает &lt;img border='0' width='15' height='15' src='http://www.rsdn.ru/Forum/images/smile.gif' /&gt; ). &lt;br /&gt;
Подсажите пжлста можно ли все таки с помощью BLT сделать следующий маппинг:&lt;br /&gt;
&lt;br /&gt;
Структура классов и таблиц упрощенно:&lt;br /&gt;
Иерархия классов&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;

  public class BaseObject{
    public Guid ID{get;set;}
    public string Name {get;set;}
  }

  public class User:BaseObject{
     public string UserData {get;set;}
  }

  public class MegaUser:User{
     public string MegaData {get;set;}
  }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
База:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
   &lt;span class='kw'&gt;CREATE TABLE&lt;/span&gt; [dbo].[BaseObjectTable](
    [bo_ID] [uniqueidentifier] &lt;span class='kw'&gt;NOT NULL&lt;/span&gt;,
    [bo_Name] [nvarchar](50) &lt;span class='kw'&gt;NULL&lt;/span&gt;,
    [bo_Type] [int] &lt;span class='kw'&gt;NULL&lt;/span&gt;,    &lt;span class='com'&gt;-- для дискриминатора если он нужен при таком маппинге&lt;/span&gt;
    
      &lt;span class='kw'&gt;Primary Key&lt;/span&gt; (bo_ID)
    )

   &lt;span class='kw'&gt;CREATE TABLE&lt;/span&gt; [dbo].[&lt;span class='kw'&gt;User&lt;/span&gt;](
    usr_ID [uniqueidentifier] &lt;span class='kw'&gt;NOT NULL&lt;/span&gt;,  &lt;span class='com'&gt;-- usr_ID = bo_ID -  для юзера тоже значение ключа что и и таблице BaseObjectTable&lt;/span&gt;
        usr_Data [nvarchar](50) &lt;span class='kw'&gt;NULL&lt;/span&gt;,

      &lt;span class='kw'&gt;Primary Key&lt;/span&gt; (usr_ID)
   )

   &lt;span class='kw'&gt;CREATE TABLE&lt;/span&gt; [dbo].[MegaUser](
    musr_ID [uniqueidentifier] &lt;span class='kw'&gt;NOT NULL&lt;/span&gt;,  &lt;span class='com'&gt;-- musr_ID = usr_ID = bo_ID -  аналогично для мега юзера значение ключей во всех табличках совпадают&lt;/span&gt;
       musr_MegaData  [nvarchar](50) &lt;span class='kw'&gt;NULL&lt;/span&gt;,
      &lt;span class='kw'&gt;Primary Key&lt;/span&gt; (car_ID)        
   )&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно ожидаемый результат для запроса на LINQ &lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt; var res=dbmanager.MegaUsers.ToList() ;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;Select&lt;/span&gt; bo_ID, bo_Name,usr_Data,musr_MegaData
&lt;span class='kw'&gt;from&lt;/span&gt; BaseObjectTable
&lt;span class='kw'&gt;join User on&lt;/span&gt; usr_ID = bo_ID
&lt;span class='kw'&gt;join&lt;/span&gt; MegaUser &lt;span class='kw'&gt;on&lt;/span&gt; musr_ID  = usr_ID&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пробовал описывать маппинг вот так &lt;br /&gt;
   &lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
 [TableName("BaseObjectTable")]
    [InheritanceMapping(Code = 1, Type = typeof(User))]
    [InheritanceMapping(Code = 2, Type = typeof(MegaUser))]
   
  public class BaseObject{
        [PrimaryKey]     [MapField("bo_ID")]   public Guid ID{get;set;}

        [MapField("bo_Name")]    public string Name { get; set; }

        [MapField(IsInheritanceDiscriminator = true,MapName ="bo_Type")]     public int Type { get; set; }
  }

    [TableName("User")]
    public partial class User : BaseObject    {          
          [MapField("usr_Data")]    public string UserData { get; set; }
    }

    [TableName("MegaUser")]
    public partial class MegaUser: User {
          [MapField("musr_MegaData")]    public string MegaData{ get; set; }
    }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
и вот так (для переопредения поля ID на usr_ID вместо bo_ID&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
[TableName("User")]
    public partial class User : BaseObject    {
            [PrimaryKey]  [MapField("usr_ID")]   public override Guid ID{get;set;}
         ....
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
как ни кручу получается все время примерно одно и тоже :&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;SELECT&lt;/span&gt;
        [t1].[musr_MegaData] &lt;span class='kw'&gt;as&lt;/span&gt; [MegaData],
        [t1].[usr_Data] &lt;span class='kw'&gt;as&lt;/span&gt; [UserData],
        [t1].[bo_ID] &lt;span class='kw'&gt;as&lt;/span&gt; [ID],
        [t1].[bo_Name] &lt;span class='kw'&gt;as&lt;/span&gt; [Name],
        [t1].[bo_Type] &lt;span class='kw'&gt;as&lt;/span&gt; [Type1]
&lt;span class='kw'&gt;FROM&lt;/span&gt;
        [&lt;span class='kw'&gt;User&lt;/span&gt;] [t1]
&lt;span class='kw'&gt;WHERE&lt;/span&gt;
        [t1].[bo_Type] = 2&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Заранее спасибо.&lt;br /&gt;
&lt;br /&gt;
PS: если что не так сильно не пинайте &amp;mdash; гугл помочь не смог , а документации откровенно говоря не хватает&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Mon, 09 Apr 2012 11:39:04 GMT</pubDate>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>ConnectionProvider like Nhibernate</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4693899.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4693899.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4693899.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4693899</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4693899.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4693899</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Необходимо перед каждым запросом к БД устанавливать CONTEXT_INFO&lt;br /&gt;
В NHibernate, например, можно определить ConnectionProvider и внутри него реализоавать эту функциональность.&lt;br /&gt;
Какой подход избрать для BLT в случае если требуется выполнить SET CONTEXT_INFO после открытия соединения и перед каждым запросом к БД MSSQL?&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Sun, 08 Apr 2012 19:28:30 GMT</pubDate>
		
			<author>snowstorm &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Xml маппинг больше не поддерживается?</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4693437.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4693437.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4693437.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4693437</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4693437.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4693437</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Я правильно понимаю что в последних версиях BLT Xml-маппинг не поддерживается, остался только маппинг на атрибутах?&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Sun, 08 Apr 2012 09:22:50 GMT</pubDate>
		
			<author>snowstorm &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Пооддержка новых фич</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4691948.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4691948.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4691948.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4691948</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4691948.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4691948</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;1) Будет ли поддержка новых команд MSSQL 2012?&lt;br /&gt;
2) Будет ли поддержка асинхронного выполнения запросов?&lt;br /&gt;
Если да, то когда ждать?&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Fri, 06 Apr 2012 11:50:03 GMT</pubDate>
		
		
			<slash:comments>5</slash:comments>
		
	</item>

	<item>
		<title>BLT vs linq2db</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4681965.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4681965.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4681965.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4681965</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4681965.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4681965</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;как я понял миграция BLT -&amp;gt; linq2db происходит весьма активно, но часть функционала BLT в linq2db просто не попадет (дата аксессоры, эмит, обджект биндер, едитабл обджект и т.п.)&lt;br /&gt;
в связи с чем встает вопрос, как будут сосуществовать и развиваться эти 2 проекта?&lt;br /&gt;
&lt;br /&gt;
пока коммиты идут в оба репозитария, но этож будет закат солнца вручную, в особенноети если считать что один проект это си-диез, а другой немераль.&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Fri, 30 Mar 2012 10:23:34 GMT</pubDate>
		
			<author>ili &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>5</slash:comments>
		
	</item>

	<item>
		<title>Можно ли читать и обновлять данные паралельно?</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4662373.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4662373.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4662373.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4662373</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4662373.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4662373</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;такой код:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
        [Test]
        &lt;span class='kw'&gt;public void&lt;/span&gt; ParallelSelectAndUpdate()
        {
            ForEachProvider(Providers.Select(p =&amp;gt; p.Name).Except(&lt;span class='kw'&gt;new&lt;/span&gt;[] {ProviderName.Firebird}).ToArray(), context =&amp;gt;
                {
                    &lt;span class='kw'&gt;var&lt;/span&gt; db = context &lt;span class='kw'&gt;as&lt;/span&gt; TestDbManager;
                    &lt;span class='kw'&gt;if&lt;/span&gt; (db == &lt;span class='kw'&gt;null&lt;/span&gt;) &lt;span class='kw'&gt;return&lt;/span&gt;;

                    db.BeginTransaction();
                    &lt;span class='kw'&gt;try&lt;/span&gt;
                    {
                        Assert.That(db.Person.Count(), Is.GreaterThan(0));

                        &lt;span class='kw'&gt;foreach&lt;/span&gt; (&lt;span class='kw'&gt;var&lt;/span&gt; parent &lt;span class='kw'&gt;in&lt;/span&gt; db.Person) &lt;span class='com'&gt;// читаем&lt;/span&gt;
                        {
                            &lt;span class='kw'&gt;new&lt;/span&gt; SqlQuery(db).Update(parent); &lt;span class='com'&gt;// и обновляем&lt;/span&gt;
                        }    
                    }
                    &lt;span class='kw'&gt;finally&lt;/span&gt;
                    {
                        db.RollbackTransaction();
                    }
                });
        }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
выдает ошибку:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;System.InvalidOperationException : Invalid attempt of read when the reader is closed.&lt;br /&gt;
at FirebirdSql.Data.FirebirdClient.FbDataReader.CheckState()&lt;br /&gt;
at FirebirdSql.Data.FirebirdClient.FbDataReader.Read()&lt;br /&gt;
at BLToolkit.Data.DataProvider.DataProviderBase.DataReaderBase`1.Read() in DataProviderBase.cs: line 341&lt;br /&gt;
at BLToolkit.Data.Linq.Query`1.&amp;lt;RunQuery&amp;gt;d__11.MoveNext() in Query.cs: line 330&lt;br /&gt;
at BLToolkit.Data.Linq.Query`1.&amp;lt;Map&amp;gt;d__60.MoveNext() in Query.cs: line 988&lt;br /&gt;
at Data.Linq.SelectTest.&amp;lt;ParallelSelectAndUpdate&amp;gt;b__86(ITestDataContext context) in SelectTest.cs: line 535&lt;br /&gt;
at Data.Linq.TestBase.ForEachProvider(Type expectedException, String[] exceptList, Action`1 func) in TestBase.cs: line 238&lt;br /&gt;
at Data.Linq.SelectTest.ParallelSelectAndUpdate() in SelectTest.cs: line 525&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Это by design или косяк?&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Fri, 16 Mar 2012 06:55:35 GMT</pubDate>
		
			<author>Jack128 &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>UnitOfWork - как?</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4659984.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4659984.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4659984.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4659984</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4659984.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4659984</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Привет.&lt;br /&gt;
&lt;br /&gt;
Есть приложение, критичное по времени выполнения.&lt;br /&gt;
Допустим также, есть какая-то сложная бизнес процедура, выполняющая многочисленные инсерты.&lt;br /&gt;
Есть идея &amp;mdash; вместо вызова единичных инсертов 30-40 раз, сделать по примеру UoF паттерна какой-то интерфейс, который бы складывал все инсерт вызовы в один батч, а потом посылал все на SQL Server одной командой.&lt;br /&gt;
&lt;br /&gt;
Вопросы:&lt;br /&gt;
&amp;mdash; имеет ли это смысл вообще?&lt;br /&gt;
&amp;mdash; возможно ли такое реализовать средствами BL и как (все инсерты параметризованные, конечно)&lt;br /&gt;
&amp;mdash; ну и может какой пример есть или готовое решение? все таки задача не тривиальная если глубже копнуть&lt;br /&gt;
&lt;br /&gt;
спасибо&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Wed, 14 Mar 2012 14:15:50 GMT</pubDate>
		
			<author>SHEMA &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>8</slash:comments>
		
	</item>

	<item>
		<title>BLToolkit like и upper case</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4646254.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4646254.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4646254.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4646254</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4646254.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4646254</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Всем привет!&lt;br /&gt;
&lt;br /&gt;
Есть такая задача:&lt;br /&gt;
есть некая таблица v.GetTable&amp;lt;T&amp;gt;() так вот для нее надо построить where условие со значениями в upper case&lt;br /&gt;
типа того:&lt;br /&gt;
v.GetTable&amp;lt;T&amp;gt;().Where(string.Format(" upper({0}) like upper('%{1}%') ",column, value);&lt;br /&gt;
тк нужно применительно к Postgresql, то можно использовать ILIKE или ~~*, соответственно без upper()&lt;br /&gt;
&lt;br /&gt;
подскажите, люди добрые &lt;img border='0' width='15' height='15' src='http://www.rsdn.ru/Forum/images/smile.gif' /&gt;&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Sun, 04 Mar 2012 09:54:42 GMT</pubDate>
		
			<author>23Poison &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Вопрос по SequenceNameAttribute...</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4632142.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4632142.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4632142.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4632142</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4632142.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4632142</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;subj и влияние на него AssociationAttribute  &lt;img border='0' width='15' height='15' src='http://www.rsdn.ru/Forum/images/smile.gif' /&gt; &lt;br /&gt;
&lt;br /&gt;
Провайдер: Odp.net&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;    [TableName(Name = &lt;span class='str'&gt;"t_user"&lt;/span&gt;)]
    &lt;span class='kw'&gt;public sealed class&lt;/span&gt; User
    {
        [PrimaryKey, Identity, NonUpdatable]
        [&lt;b&gt;SequenceName&lt;/b&gt;(&lt;span class='str'&gt;"sq_user"&lt;/span&gt;)]
        [MapField(&lt;span class='str'&gt;"user_id"&lt;/span&gt;)]
        &lt;span class='kw'&gt;public long&lt;/span&gt; Id { &lt;span class='kw'&gt;get&lt;/span&gt;; &lt;span class='kw'&gt;set&lt;/span&gt;; }
    }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
при вставки новой записи db.InsertWidthIdentity(), генерится такой запрос:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;INSERT INTO&lt;/span&gt; t_user
(
        user_id,
)
&lt;span class='kw'&gt;VALUES&lt;/span&gt;
(
        &lt;b&gt;sq_user.nextval&lt;/b&gt;,
)
RETURNING
        user_id &lt;span class='kw'&gt;INTO&lt;/span&gt; :IDENTITY_PARAMETER&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
все ок &amp;mdash; используется сиквенс для генерации id.&lt;br /&gt;
&lt;br /&gt;
НО, как только в похожем классе появляется AssociationAttribute у одного из полей (доказано экспериментальным путем), начинаются проблемы, а именно перестает использоваться генерация сиквенса  &lt;img border='0' width='15' height='22' src='http://www.rsdn.ru/Forum/images/confused.gif' /&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;    [TableName(Name = &lt;span class='str'&gt;"t_user_contract"&lt;/span&gt;)]
    &lt;span class='kw'&gt;public sealed class&lt;/span&gt; Contract
    {
        [PrimaryKey, Identity, NonUpdatable]
        [&lt;b&gt;SequenceName&lt;/b&gt;(&lt;span class='str'&gt;"sq_user_contract"&lt;/span&gt;)]
        [MapField(&lt;span class='str'&gt;"user_contract_id"&lt;/span&gt;)]
        &lt;span class='kw'&gt;public long&lt;/span&gt; Id { &lt;span class='kw'&gt;get&lt;/span&gt;; &lt;span class='kw'&gt;set&lt;/span&gt;; }

        [NotNull, NonUpdatable(OnInsert = &lt;span class='kw'&gt;false&lt;/span&gt;)]
        [MapField(&lt;span class='str'&gt;"user_id"&lt;/span&gt;)]
        &lt;span class='kw'&gt;public long&lt;/span&gt; UserId { &lt;span class='kw'&gt;get&lt;/span&gt;; &lt;span class='kw'&gt;set&lt;/span&gt;; }

        [&lt;b&gt;Association&lt;/b&gt;(ThisKey = &lt;span class='str'&gt;"UserId"&lt;/span&gt;, OtherKey = &lt;span class='str'&gt;"Id"&lt;/span&gt;, CanBeNull = &lt;span class='kw'&gt;false&lt;/span&gt;)]
        &lt;span class='kw'&gt;public&lt;/span&gt; User User { &lt;span class='kw'&gt;get&lt;/span&gt;; &lt;span class='kw'&gt;set&lt;/span&gt;; }
        
        [NotNull]
        [MapField(&lt;span class='str'&gt;"label"&lt;/span&gt;)]
        &lt;span class='kw'&gt;public string&lt;/span&gt; Name { &lt;span class='kw'&gt;get&lt;/span&gt;; &lt;span class='kw'&gt;set&lt;/span&gt;; }
    }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
при вставки новой записи db.InsertWidthIdentity(), генерится такой запрос:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;INSERT INTO&lt;/span&gt; t_user_contract
(
        user_id,
        label
)
&lt;span class='kw'&gt;VALUES&lt;/span&gt;
(
        :UserId,
        :Name
)
RETURNING
        user_contract_id &lt;span class='kw'&gt;INTO&lt;/span&gt; :IDENTITY_PARAMETER&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
что неправильно, т.к. сиквенс не используется.&lt;br /&gt;
&lt;br /&gt;
Как Association может влиять на это?&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Fri, 24 Feb 2012 08:57:16 GMT</pubDate>
		
			<author>AK107 &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>15</slash:comments>
		
	</item>

	<item>
		<title>Nullable string -&gt; string.Empty</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4631843.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4631843.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4631843.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4631843</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4631843.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4631843</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Привет!&lt;br /&gt;
&lt;br /&gt;
Почему строковый NULL из БД отмапливается в string.Empty, а не в null?&lt;br /&gt;
Как сделать так, чтобы в объекте был все-таки null?&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;using&lt;/span&gt; (&lt;span class='kw'&gt;var&lt;/span&gt; db = &lt;span class='kw'&gt;new&lt;/span&gt; NorthwindDB())
{
    &lt;span class='kw'&gt;var&lt;/span&gt; customer = (&lt;span class='kw'&gt;from&lt;/span&gt; c &lt;span class='kw'&gt;in&lt;/span&gt; db.Customer
                    &lt;span class='kw'&gt;where&lt;/span&gt; c.CustomerID == &lt;span class='str'&gt;"ALFKI"&lt;/span&gt;
                    &lt;span class='kw'&gt;select&lt;/span&gt; c).First();
    &lt;span class='com'&gt;// customer.Region == ""&lt;/span&gt;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Fri, 24 Feb 2012 05:47:35 GMT</pubDate>
		
			<author>Ummon &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Тупые вопросы</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4629113.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4629113.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4629113.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4629113</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4629113.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4629113</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;1.&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;foreach&lt;/span&gt; (&lt;span class='kw'&gt;var&lt;/span&gt; entity &lt;span class='kw'&gt;in&lt;/span&gt; dbManager.GetTable&amp;lt;Entity&amp;gt;().Where(x =&amp;gt; ...))
  &lt;span class='com'&gt;//some operation;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
что происходит во время foreach &amp;mdash; затягивание в память отфильтрованных данных и последующая итерация или же итерация по курсору и в памяти только одна запись (аналог итерации по IDataReader)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. есть sql оператор &lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;insert into&lt;/span&gt; tableA &lt;span class='kw'&gt;values&lt;/span&gt; (a,b,c)
(&lt;span class='kw'&gt;select&lt;/span&gt; d,e,f &lt;span class='kw'&gt;from&lt;/span&gt; tableB &lt;span class='kw'&gt;where&lt;/span&gt; ...)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
можно замутить аналог средставами BLToolkit не прибегая к plain sql?&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Wed, 22 Feb 2012 08:22:15 GMT</pubDate>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>Metadata from datasource</title>
		<link>http://www.rsdn.ru/Forum/prj.rfd/4607696.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/prj.rfd/4607696.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/prj.rfd/4607696.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=4607696</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/4607696.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=4607696</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Прошу не пинать, если такой вопрос уже поднимался. Можно ли при помощи BlToolkit получить метаинформацию о источнике данных, например, имена таблиц, имена и связи колонок по имени таблицы и т.д., имея только connection string. Заранее благодарен.&lt;/div&gt;
				
		</description>
		
		<category>prj</category><category>rfd</category>
		<pubDate>Tue, 07 Feb 2012 13:24:28 GMT</pubDate>
		
			<author>muhalet &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>
</channel>
</rss>

