多个EF问题。我究竟做错了什么?

时间:2012-10-05 00:51:38

标签: entity-framework odp.net odac

所有

我在类库项目的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初始化程序中删除了抛出异常(可能是个坏主意,但我还是新手)。

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

最后,在做了一些挖掘之后,我发现在初始化_MyCollectionEF变量之后,连接字符串神奇地变为“Data Source =。\ SQLEXPRESS; Initial Catalog = MyConnection; Integrated Security = True; MultipleActiveResultSets = True;应用程序名称= EntityFrameworkMUE“

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

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

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

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

提前感谢您的帮助。

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

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

0 个答案:

没有答案