2016-06-23 6 views
0

エンティティ6.0を使用してストアドプロシージャを呼び出そうとしています。これらの解決策を探した後、彼らは問題を解決しなかった。herehere。問題は、返された列の1つにスペースがあることです(ストアドプロシージャを変更できません)。ノー成功を収めて、次の試してみましたしました:空の列を返すストアドプロシージャを呼び出す方法

MyModel.cs

using System; 
... 

namespace ... 
{ 
    public class MyModel 
    { 
     [Display(Name = "ID")] 
     public string id{ get; set; } 

     [Display(Name = "Number Of ID")] 
     [Column("Number Of ID")] 
     public int number_Of_ID { get; set; } 

    } 

    public class MyModelContext : DbContext 
    { 
     public DbSet<MyModel> MyModels{ get; set; } 
    } 
} 

MyController.cs

using System; 
... 

namespace ... 
{ 
    public class MyController : Controller 
    { 
     private MyEntities db = new MyEntities(); 

     public ActionResult Index() 
     { 

      var query = @"exec usp_getIds"; 

      var results = db.Database.SqlQuery<MyModel>(query); 
      return View(results); 
     } 
    } 

コードをデバッグするときに、私のモデルがためidの値を持っていますが、ないのnumber_Of_ID。値は常に0です。また、データ型をstringに変更しようとしましたが、nullを返します。助けてください。

+1

number_of_IDは、スペースもモデルに文字列をフィールドを作ることができれば - そのように、番号が戻ってくるだろう、とあなたはキャストすることができますそれが数字であることを検証した後でそれを使用するコード内にある。 –

+0

残念ながら、私は文字列を使用しようとし、 'null'を返します。 – usr4896260

答えて

1

私はDBContextを使用できませんでしたが、SQLDataAdapterを使用して解決策を見つけました。スペースがあるカラムでも、正常にコールすることができました。以下は、コントローラで変更されました:

MyController.cs

using System; 
... 

namespace ... 
{ 
    public class MyController : Controller 
    { 
     public ActionResult Index() 
     { 
      var myResultsList = new List<MyModel>(); 
      string connectionString = ConfigurationManager.AppSettings["myDBConn"]; 
      var conn = new SqlConnection(connectionString); 
      conn.Open(); 
      string query = @"usp_getIds"; 
      using (var sqlAdpt = new SqlDataAdapter(query, conn)) 
      { 
       sqlAdpt.SelectCommand.CommandType = CommandType.StoredProcedure; 
       var results = new DataSet(); 
       sqlAdpt.Fill(results); 
       myResultsList= results.Tables[0].AsEnumerable(). 
       Select(dataRow => new MyModel 
        { 
         id = dataRow.Field<string>("ID"), 
         numberOfID = dataRow.Field<int>("Number Of ID") 
        }).ToList(); 

      } 
      return View(myResultsList); 
     } 
    } 
1

列名または値にスペースがあることを意味していますか?

ストアドプロシージャusp_getIdsについては

、あなたが行うことができる必要があります:あなたがモデルに手順を追加するとき

List<usp_getIds_Result> results = db.usp_getIds().ToList(); 

クラスusp_getIds_Resultが自動的に作成されます。

これを試してみてください。

関連する問題