我的团队可以读取一个由另一个团队维护的数据库。我们有许多只有我们运行的脚本,所以它们从来没有作为链式码添加到数据库中(我们也不希望它们是)。
在实体框架6中,是否可以在我的模型中包含一个包含存储过程的文件,以便我们可以利用EF中的代码生成?我们更希望代码看起来像:
using (var db = new DatabaseEntities())
{
var properlyTypedResult = db.GetEntriesThatStartWith(firstName);
}超过:
using (var db = new DatabaseEntities())
{
var rawResult = db.Database.ExecuteSqlCommand("SELECT * FROM dbo.Person WHERE FirstName LIKE '@p0%'", firstName);
var properlyTypedResult = CastAppropriately(rawResult);
}该功能似乎缺少,但我想我会检查,我希望它在设计器视图,右键单击,添加新的->函数导入...。但这只允许向已经在数据库中的模型中添加sprocs。
发布于 2016-09-13 05:01:03
我找不到我想要的东西。我决定简单地编写我自己的代码生成,并尽可能多地利用实体框架。
例如,
using (var context = new DbContext())
{
var dataTable = new DataTable();
var connection = (SqlConnection)context.Database.Connection;
if (connection != null && connection.State == ConnectionState.Closed)
connection.Open();
using (var adapter = new SqlDataAdapter(queryString, connection))
adapter.Fill(dataTable);
}即,
var objectBuilder = new StringBuilder();
objectBuilder.AppendLine("public class QueryResult");
objectBuilder.AppendLine("{");
foreach (DataColumn column in dataTable.Columns)
{
objectBuilder.AppendLine(String.Format("public {0} {1} { get; set; }", column.DataType.Name, column.ColumnName));
}
objectBuilder.AppendLine("}");即,
private static string GetQueryString(string firstName)
{
return String.Format($"SELECT * FROM dbo.Person WHERE FirstName LIKE '{firstName}%'", firstName);
}
public static partial class DbContextExtensions
{
public static List<QueryResult> GetEntriesThatStartWith(this DbContext context, string firstName)
{
return context.Database.SqlQuery<QueryResult>(GetQueryString(firstName)).ToList();
}
}现在,我们可以将它用作一个常规的sproc调用:
using (var db = new DbContext())
{
var properlyTypedResult = db.GetEntriesThatStartWith(firstName);
}发布于 2016-09-09 02:25:22
我想你忘了LINQ -第二个例子是.
List<People> people = (List<People>)db.Person.Where(f => f.FirstName.StartsWith(firstname)).ToList();这应该接近你要找的东西。是你的朋友。
https://stackoverflow.com/questions/39402642
复制相似问题