1

全部,

我在类库项目的 app.config 文件中有以下连接字符串:

<connectionStrings>
   <add 
      name="MyConnection"
      connectionString="
         metadata=res://*/Namespace.Model1.csdl|res://*/Namespace.Model1.ssdl|res://*/Namespace.Model1.msl;
         provider=Oracle.DataAccess.Client;
         provider connection string='data source=&quot;
         (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = myhost.mydomain.com)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = myservice.mydomain.com)(SERVICE = DEDICATED)))
         &quot;;
         password=MyPasswd;
         persist security info=True;
         user id=MyID'" 
      providerName="System.Data.EntityClient" />
</connectionStrings>

如您所见,我正在使用 ODAC 连接到 Oracle 服务器。一切似乎都很好,我可以从我的数据库中更新我的模型(EntityFramework)。

但是,在运行以下代码时:

public class MyClass //classy, isn't it
{
    public MyClass()
    {
        MyCollectionEF = new MyCollection();
    }
    private MyCollection _MyCollectionEF;

    public MyCollection MyCollectionEF
    {
        get
        {
            return _MyCollectionEF;
        }
        set
        {
            _MyCollectionEF = value;
            _Region = (ICollection<RegionEnt>)_MyCollectionEF.RegionEnt.OrderBy(a => a.REGION);
            _LangSource = (ICollection<LangEnt>)_MyCollectionEF.LangEnt.OrderBy(a => a.LANGUAGE);
        }
    }
}

我最终得到一个“UnintentionalCodeFirst”异常。好的,很明显,此时我可能做错了,但我坚持并从 OnModelCreating 初始化程序中删除了 throw 异常(可能是个坏主意,但我还是新手)。

接下来,我最终得到一个 ModelValidationException ,说明我的所有实体都没有任何键(尽管当我查看模型时,我可以清楚地看到所涉及的键)。

最后,经过一番挖掘,我发现在初始化我的 _MyCollectionEF 变量后,连接字符串神奇地更改为“Data Source=.\SQLEXPRESS;Initial Catalog=MyConnection;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE”

好的,现在要问问题(不幸的是,我有很多问题)。

1) 为什么我会收到 UnintentionalCodeFirst 异常。有没有更好的方法将我需要的数据加载到 iCollections 对象(或其他适合使用 MVVM 模式进行数据绑定、添加和删除数据的对象)中。

2) 为什么在我的模型中明显有键时会引发 ModelValidationException,以及解决此问题的最佳方法是什么(记住我计划使用 MVVM)。

3) 为什么我的 ConnectionString 会神奇地改变?这是 ODAC 在幕后做的事情,还是有更好的理由。我应该指出,在执行 _MyCollectionEF.DataBase.Connection.Open() 时,我收到一条错误消息,指出用户“mywindowslogon”的连接被拒绝,这是有道理的,因为后端的实际服务器没有设置为集成安全。

提前感谢您的所有帮助。

编辑:我还应该指出,由于某些业务需求,其中一部分是多:多关系(即在这个简单的示例中,一个区域可以有多种语言,一种语言可以有多个区域)。

编辑:也在 social.msdn.microsoft.com 上询问

4

0 回答 0