report a not important problem

Dec 3, 2009 at 12:17 PM
Edited Dec 3, 2009 at 12:18 PM

就是说

如果同时定义两个Context

 

<add key="DefaultContext" value="Ne"/>
    <add key="AutoCreateTable" value="true" />
    <add key="Ne.DataBase" value="@MySql : server=localhost; user id=root; password=zzzzzz; database=kr; pooling=true; charset=utf8;" />
    <add key="Ne.AutoCreateTable" value="true" />
    <add key="Ne.DbProviderFactory" value="@SmartDbFactory : MySql.Data, Version=6.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    <add key="Re.DataBase" value="@MySql : server=localhost; user id=root; password=zzzzzz; database=k2; pooling=true; charset=utf8;" />
    <add key="Re.DbProviderFactory" value="@SmartDbFactory : MySql.Data, Version=6.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

 

    <add key="DefaultContext" value="Ne"/>

    <add key="AutoCreateTable" value="true" />

    <add key="Ne.DataBase" value="@MySql : server=localhost; user id=root; password=1; database=kr; pooling=true; charset=utf8;" />

    <add key="Ne.AutoCreateTable" value="true" />

    <add key="Ne.DbProviderFactory" value="@SmartDbFactory : MySql.Data, Version=6.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

    <add key="Re.DataBase" value="@MySql : server=localhost; user id=root; password=1; database=k2; pooling=true; charset=utf8;" />

    <add key="Re.DbProviderFactory" value="@SmartDbFactory : MySql.Data, Version=6.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

 

 

 

然后使用默认事务去包含那个非默认Context,就读不出那个里面的Context

DbEntry.UsingTrasaction (

 

。。。

var rm = new DbContext("Re");

rm....就没用了

不过,也许这不是什么普遍问题。。。。

我只是在做数据库转换的时候发现的这个问题。我把事务去掉就好了。

 

)

 

 

Coordinator
Dec 4, 2009 at 1:57 AM

这个我知道,它只应该使用自己的事务,可以使用NewTransaction避免被包含到其他Context的事务中:

DbEntry.UsingTransaction(delegate
{
    user1.Save();
    user2.Save();
    other.NewTransaction(delegate
    {
        other.Save(book1);
        other.Save(book2);
    });
});
不过,没什么必要,本来就不应该不同的数据库混用Transaction,如果需要数据库间事务,需要使用TransactionScope,不过它需要数据库事务管理器,而且可能只支持Sql Server吧。