所有
我在类库项目的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="
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = myhost.mydomain.com)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = myservice.mydomain.com)(SERVICE = DEDICATED)))
";
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上询问