我正在尝试在我的代码中进行此调用:
string conn = ConfigurationManager.ConnectionStrings["MyDBEntities"].ConnectionString;
DataContext context = new DataContext(conn);
Table<MyApp.Entities.Employee> myTable = context.GetTable<MyApp.Entities.Employee>();
这是我的连接字符串:
<connectionStrings>
<add name="MyDBEntities" connectionString="metadata=res://*/Entities.MyDB.csdl|res://*/Entities.MyDB.ssdl|res://*/Entities.MyDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=STEVEN-PC;Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
<add name="MyDB" connectionString="Server=STEVEN-PC;Database=MyDB;Trusted_Connection=yes;" />
</connectionStrings>
创建 DataContext 时出现错误:不支持关键字:“元数据”。
如果我使用第二个连接字符串,在尝试获取表时会出现错误:“/”应用程序中的服务器错误。 “MyApp.Entities.Employee”类型未映射为表。
我在这里做错了什么?
最佳答案
您正在混合搭配 LINQ-to-SQL和 LINQ-to-Entites ;两者不兼容。
当您使用 LINQ-to-Entities 创建实体模型时,它会创建一个派生自 ObjectContext
的对象这将有 IQueryable<T>
您将用于查询基础的实现。这ObjectContext
还将具有采用适当元数据将实体模型映射到数据库的构造函数;这就是 Entity Framework 连接字符串需要 Metadata
的原因引用资料。
当您尝试使用 LINQ-to-SQL 时,您可以将常规数据库连接传递给 DataContext
类(或派生类)。 DataContext
处理对象到数据库的映射不同于 Entity Framework ;它依赖于模型上的属性来映射到表/列(分别使用 TableAttribute
和 ColumnAttribute
属性)。当您使用 Entity Framework 创建实体时,这些属性不存在。
注意:您可以将 XML 映射文件(不同于 Entity Framework 中使用的类型)与 LINQ-to-SQL 一起使用,但并不常用。
也就是说,最简单的方法是选择一种技术堆栈(LINQ-to-SQL 或 LINQ-to-Entities)并坚持使用。
关于c# - 从 Entity Framework 连接字符串创建 DataContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6012638/