Linq to SQL vs Entity Data Model:获取存储过程运行

时间:2010-08-20 22:09:06

标签: linq-to-sql ado.net silverlight-4.0 c#-4.0 wcf-ria-services

我以前是在搞乱Silverlight和RIA,我使用的是ADO.NET实体数据模型和域上下文。我正在教自己如何从RIA运行存储过程,并且无法使用以前的设置,因此我开始尝试使用LINQ to SQL方法。我做了以下事情:

  • 添加了DBML
  • 拖放我的表和示例存储过程
  • 保存了DBML并构建了重建解决方案和项目文件。
  • 创建域服务并尝试添加dbml。

这是我的DBML alt text

这是我的错误。 Available DataContext / ObjectContext类列表显示为空。我已经多次重建,甚至重新启动了visual studio。 alt text

所以这是我的问题:

  1. 是否有一种简单的方法可以使用我丢失的ADO.Net进行存储过程,因此我可以跳过添加LINQtoSQL类。
  2. 我错过了添加dbml类并以这种方式添加存储过程的简单方法。
  3. CODE

    ZipCodeDataClasses.dbml.layout

    <?xml version="1.0" encoding="utf-8"?>
    <ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 11, 8.5" name="ZipCodeDataClasses">
      <DataContextMoniker Name="/ZipCodeDataClassesDataContext" />
      <nestedChildShapes>
        <classShape Id="de7acfae-754b-4577-b227-3a33198fdc95" absoluteBounds="7.125, 2.375, 2, 1.3862939453125">
          <DataClassMoniker Name="/ZipCodeDataClassesDataContext/ZipCode" />
          <nestedChildShapes>
            <elementListCompartment Id="8744ad5e-7b77-4770-911d-6dc963876e40" absoluteBounds="7.14, 2.835, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
          </nestedChildShapes>
        </classShape>
      </nestedChildShapes>
    </ordesignerObjectsDiagram>
    

    ZipCodeDataClasses.designer.cs

    #pragma warning disable 1591
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated by a tool.
    //     Runtime Version:4.0.30319.1
    //
    //     Changes to this file may cause incorrect behavior and will be lost if
    //     the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace StoredProcedureTest.Web
    {
     using System.Data.Linq;
     using System.Data.Linq.Mapping;
     using System.Data;
     using System.Collections.Generic;
     using System.Reflection;
     using System.Linq;
     using System.Linq.Expressions;
     using System.ComponentModel;
     using System;
    
    
     [global::System.Data.Linq.Mapping.DatabaseAttribute(Name="ZIPCODES")]
     public partial class ZipCodeDataClassesDataContext : System.Data.Linq.DataContext
     {
    
      private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
    
        #region Extensibility Method Definitions
        partial void OnCreated();
        #endregion
    
      public ZipCodeDataClassesDataContext() : 
        base(global::System.Configuration.ConfigurationManager.ConnectionStrings["ZIPCODESConnectionString"].ConnectionString, mappingSource)
      {
       OnCreated();
      }
    
      public ZipCodeDataClassesDataContext(string connection) : 
        base(connection, mappingSource)
      {
       OnCreated();
      }
    
      public ZipCodeDataClassesDataContext(System.Data.IDbConnection connection) : 
        base(connection, mappingSource)
      {
       OnCreated();
      }
    
      public ZipCodeDataClassesDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
        base(connection, mappingSource)
      {
       OnCreated();
      }
    
      public ZipCodeDataClassesDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
        base(connection, mappingSource)
      {
       OnCreated();
      }
    
      public System.Data.Linq.Table<ZipCode> ZipCodes
      {
       get
       {
        return this.GetTable<ZipCode>();
       }
      }
    
      [global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.sp_GetCityByZip")]
      public int sp_GetCityByZip([global::System.Data.Linq.Mapping.ParameterAttribute(Name="ZIP", DbType="NVarChar(10)")] string zIP, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="Return", DbType="NVarChar(26)")] ref string @return)
      {
       IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), zIP, @return);
       @return = ((string)(result.GetParameterValue(1)));
       return ((int)(result.ReturnValue));
      }
     }
    
     [global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ZipCodes")]
     public partial class ZipCode
     {
    
      private string _City;
    
      private string _State;
    
      private int _Zip;
    
      public ZipCode()
      {
      }
    
      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_City", DbType="VarChar(25)")]
      public string City
      {
       get
       {
        return this._City;
       }
       set
       {
        if ((this._City != value))
        {
         this._City = value;
        }
       }
      }
    
      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_State", DbType="VarChar(2)")]
      public string State
      {
       get
       {
        return this._State;
       }
       set
       {
        if ((this._State != value))
        {
         this._State = value;
        }
       }
      }
    
      [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Zip", DbType="Int NOT NULL")]
      public int Zip
      {
       get
       {
        return this._Zip;
       }
       set
       {
        if ((this._Zip != value))
        {
         this._Zip = value;
        }
       }
      }
     }
    }
    #pragma warning restore 1591
    

1 个答案:

答案 0 :(得分:0)

我放弃了尝试让存储过程与Silerlight一起使用,但是遵循本指南是我最接近实际实现的。我希望它有所帮助。

http://anhonga.wordpress.com/2010/02/17/using-stored-procedures-with-silverlight-4riapocos-part-ii/

如果您找到一种简单的方法来实现存储过程,请告诉我,因为我正在重写LINQ中的几百个过程。