【问题标题】:EDMX database mapping two procedures to the same ComplexTypeEDMX 数据库将两个过程映射到相同的 ComplexType
【发布时间】:2015-07-02 00:31:21
【问题描述】:

我正在将 .edmx 创建到我的 MVC 项目中。我已经映射了两个从数据库返回电影信息的过程。

第一个过程 getMoviesByName 只返回 Id 和 Name。第二个过程,即 getAllMovies,返回 Id、Name 和 CreatedDate。

我希望这两个程序都将数据作为一个名为 Movie 的 ComplexType 返回。

我正在实例化我的 MyDbEntities 并尝试根据以下示例中的条件使用这两个过程,但是当变量 isLookingByName 为 true 时它会失败并显示以下消息:

类型的成员“CreatedDate”在数据读取器中没有同名的对应列。

例子:

var db = new MyDbEntities();
if(isLookingByName) 
{ 
    return db.getMoviesByName(name).ToList();
}

return db.getAllMovies().ToList();

因此,只要条件为真,它就会抛出该异常。问题是我无法更改第一个程序以添加CreatedDate

只是为了让你们知道,在我的视图中,我显示了所有这三个信息 Id、Name 和 CreatedDate。当 CreatedDate 为 null 时,它不会显示,我对此很好。

有人知道我应该怎么做吗?

非常感谢!

【问题讨论】:

  • 所以即使 createDate 为 NULL 也无法包含它
  • 这两个程序都没有别的选择吗?除了 ComplexType 或解决方法之外的其他类型?我可以映射到两个 ComplexType,然后将它们变成一个模型吗?
  • 这是 EDMX 的一个限制,它会为 objectresult 创建所有这些 xml 字段,如果您不能返回相同的字段,那么解决方法是使用直接 ADO.NET
  • 能否给我一个链接来学习如何直接使用 ADO.NET ?

标签: c# asp.net asp.net-mvc edmx


【解决方案1】:

解决方法是使用 ADO.NET

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    using (SqlCommand command = new SqlCommand(
    "SELECT Id, Name and CreatedDate  FROM movies WHERE id= @id", connection))
    {

        command.Parameters.Add(new SqlParameter("@id", id));

        SqlDataReader reader = command.ExecuteReader();
        if(reader.HasRows())
        {
            var id= reader["Id"].ToString();
            var name= reader["Name"].ToString();
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2012-01-26
    • 2012-10-03
    相关资源
    最近更新 更多