2011-10-20 10 views
1

linqをSQLにORMとして渡し、linqをSQLサービスのSQLオブジェクトのaspx UIページに渡します。linqからSQlへの部分クラスがWebサービス経由で渡されない

LinqをSQLオブジェクトに渡すとうまくいきました。シリアル化され、jsonとしてアクセスできます。これらのオブジェクトのデータの中には、いくつかの異なるlinqからSQLクラスに由来するものもあるため、このWebサービスはpoco DTOを渡すとうまく動作します。

問題は、私がしようとしてみて、カスタム部分クラスで定義された余分なフィールドを持つSQLクラスにlinqを使用することです。部分的なクラスの私のカスタム側のフィールドは、Webサービスを介して取得することはありません、部分クラスのSQLの生成側へのlinqのフィールドが出くわす。

オブジェクトを作成するときにフィールドがあり、ビジュアルスタジオデバッガでサービスを見るまでフィールドが表示されますが、反対側のjsonには表示されません。ここで

は部分クラスである。ここ

using System.Runtime.Serialization; 

namespace GPSO.ATOMWebDataLayer.LinqToSql 
{ 
    public partial class Geofence 
    { 
     public string FillColor { get; set; } 
    } 
} 

は、Webサービスが

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Diagnostics; 
using System.Linq; 
using System.Net; 
using System.ServiceModel; 
using System.ServiceModel.Activation; 
using System.ServiceModel.Web; 
using System.Text; 
using System.Web; 
using System.Web.Profile; 
using System.Web.Security; 
using System.Xml; 
using GPSO.ATOMWebBusinessLayer; 
using GPSO.ATOMWebDataLayer; 
using GPSO.ATOMWebDataLayer.LinqToSql; 
using GPSO.ATOMWebDataLayer.Objects; 
using GPSOnline.ReportWebService; 

using Contact = GPSO.ATOMWebDataLayer.LinqToSql.Contact; 
using Event = GPSO.ATOMWebBusinessLayer.Event; 
using Geofence = GPSO.ATOMWebBusinessLayer.Geofence; 

namespace GPSOnline 
{ 
    [ServiceContract(Namespace = "GPSOnline")] 
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class ATOMWebService 
    { 
     private string _atomDbConnectionString; 
     private string _aspNetDbConnectionString; 
     private string _satelliteDbConnectionString; 

     [OperationContract] 
     [WebGet] 
     public IEnumerable<GPSO.ATOMWebDataLayer.LinqToSql.Geofence> GetAllGeofences() 
     { 
      NoCache(); 

      var geofenceRepo = new GeofenceRepository(GetConnectionString()); 
      return geofenceRepo.GetAllGeofences().ToList(); 
     } 
    } 
} 

and here is the Repository 

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using GPSO.ATOMWebBusinessLayer; 
using GPSO.ATOMWebDataLayer.LinqToSql; 
using GPSO.MapUtilities; 
using GPSO.Repository; 
using Microsoft.SqlServer.Types; 
using Geofence = GPSO.ATOMWebBusinessLayer.Geofence; 

namespace GPSO.ATOMWebDataLayer 
{ 
    public class GeofenceRepository 
    { 
     private static string _connectionString = ""; 

     public GeofenceRepository(string connectionString)   
     { 
      _connectionString = connectionString; 
     } 
     public IEnumerable<LinqToSql.Geofence> GetAllGeofences() 
     { 
      var dataContext = new AtomWebDataContext(_connectionString); 
      return allGeofences = dataContext.Geofences.ToList();  
     } 
} 

であり、ここでUIのページでは、[DataMemberAttribute]を使用する必要が

<%@ Page Language="C#" MasterPageFile="~/Private/ATOMWEB.master" AutoEventWireup="true" 
    Async="true" Inherits="GPSOnline.Assets" Title="ATOM®web Asset Map" CodeBehind="Assets.aspx.cs" %> 

<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> 
<%@ Register Src="../UserControls/ucAssetPicker_ClientEvent.ascx" TagName="ucAssetPicker" 
    TagPrefix="uc1" %> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderLeft" runat="Server"> 
    <asp:ScriptManagerProxy ID="ScriptManagerProxy" runat="server"> 
     <Services> 
      <asp:ServiceReference Path="/ATOMWEBService.svc" /> 
     </Services> 
     <Scripts> 
      <asp:ScriptReference Path="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;client=gme-gpsonline" /> 
      <asp:ScriptReference Path="~/scripts/MapPanel.js" /> 
      <asp:ScriptReference Path="~/scripts/jquery-1.3.2.min.js" /> 
      <asp:ScriptReference Path="~/scripts/AssetLabel.js" /> 
      <asp:ScriptReference Path="~/scripts/NumberFormatting.js" /> 
      <asp:ScriptReference Path="~/scripts/DateFormatting.js" /> 
      <asp:ScriptReference Path="~/scripts/Utilities.js" /> 
      <asp:ScriptReference Path="~/scripts/geofences.js" /> 
      <asp:ScriptReference Path="~/scripts/mapUtilities.js" /> 
     </Scripts> 
    </asp:ScriptManagerProxy> 
    <script type="text/javascript"> 
     var map = null, 
      atomWebServiceProxy = null, 
      selectedAssetId = null, 
      userPreferences = null, 
      userId = null, 
      assets = [], 
      assetMarkers = [], 
      updatedAssets = [], 
      assetStatusPanel = null, 
      assetContextItem = null, 
      trackAsset = false, 
      firstTime = true, 
      deviceChannels = { }, 
      assetPanelLayouts = { }, 
      geoFences = { }; 

     function contentPageLoad() { 
      atomWebServiceProxy = new GPSOnline.ATOMWebService(); 
     } 

     /// <summary> 

     /// <summary>   
     /// calls the webservice to get all the geo fences. 
     /// Runs gotGeoFences when service call successfull 
     /// </summary> 
     function getGeofences() { 
      atomWebServiceProxy.GetAllGeofences(gotGeofences);   
     } 


     /// <summary> 
     /// Add the collection of geoFences to the page  
     /// </summary>   
     /// <param name="Result"> A collection of GeoFences </param> 
     function gotGeofences(result) { 

      geoFences = new GeoFencesObj(map, result, "chkToggleGeofences", "<%=RadContextMenuGotoGeofence.ClientID%>", !userPreferences.DefaultShowGeofences); 

      if (userPreferences.DefaultLocationType == 2 && userPreferences.HomeSiteId != null) { 
       geoFences.zoomToGeofence(userPreferences.HomeSiteId); 
      } 
     } 
} 

答えて

0

です:

namespace GPSO.ATOMWebDataLayer.LinqToSql 
{ 
    [DataMember] 
    public partial class Geofence 
    { 
     public string FillColor { get; set; } 
    } 
} 
+0

ありがとう、ええ、私はそれを試みた。しかし、私はページにエラーが発生します。私は火かぶ虫のスクリーンショットを付けました。 –

+0

誰もそれを読むことはできません。 –

+0

申し訳ありませんが、ここに画像への直接のURLです。 http://i.stack.imgur.com/5YkiV.png –