另外,为了实现更新操作方法,我们在这里修改每个字段的属性为UpdateCheck=UpdateCheck.Never。这时在cs文件中,设计器自动生成了一些代码。为了说明问题在这里我贴出相关不完整的代码。
[Table(Name="dbo.Product")]
[DataContract()]
public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged
{
public Product()
{
this.Initialize();
}
[Column(Storage="_ProductID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY",
IsPrimaryKey=true, IsDbGenerated=true,UpdateCheck=UpdateCheck.Never)]
[DataMember(Order=1)]
public int ProductID{ }
[Column(Storage="_ProductName", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)]
[DataMember(Order=2)]
public string ProductName{ }
[Column(Storage="_ProductType", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)]
[DataMember(Order=3)]
public string ProductType{ }
[Column(Storage="_CompleteTime", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)]
[DataMember(Order=4)]
public string CompleteTime{ }
[Column(Storage="_ProductImage", DbType="VarChar(300)", UpdateCheck=UpdateCheck.Never)]
[DataMember(Order=5)]
public string ProductImage{ }
[Column(Storage="_Principal", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)]
[DataMember(Order=6)]
public string Principal{ }
[Column(Storage="_AwardUnit", DbType="VarChar(100)", UpdateCheck=UpdateCheck.Never)]
[DataMember(Order=7)]
public string AwardUnit{ }
private void Initialize()
{
OnCreated();
}
[OnDeserializing()]
[System.ComponentModel.EditorBrowsableAttribute(EditorBrowsableState.Never)]
public void OnDeserializing(StreamingContext context)
{
this.Initialize();
}
}
这里,我们可以看到,VS自动为表(这里映射为类)添加了DataContract属性,为序列化的成员添加了DataMember特性,同时设置了DataMember特性的Order属性为WCF提供序列化的顺序。另外,增加了一个序列化OnDeserializing事件,这个事件在反序列化之前发生,用于初始化类成员。
Web Service层实现服务层就是在Silverlight客户端与Web服务端提供一个通道,官方推荐使用WCF来读取,当然ASMX也可以。我想不久将来微软可能专门为Silverlight设计一个Silverlight-Enabled WCF Service,不过现在使用WCF Service也可以访问,使用这个的时候一定要注意在web.config文件中把wsHttpBinding改为basicHttpBinding。
第一步:添加WCF服务

附件:
您所在的用户组无法下载或查看附件第二步:定义服务契约。我们为WCF Service提供的增删查改方法定义服务契约。
[ServiceContract]
public interface IAcademeService
{
[OperationContract]
List<Product> GetAllProducts();
[OperationContract]
Product SaveProduct(Product product);
[OperationContract]
void DeleteProduct(Product product);
}
第三步:实现服务:为增删查改方法具体实现。
在这里,提供一个小技巧,在IAcademeService下点击小箭头,选择实现接口,VS自动为我们生成了上面定义的没有实现的方法。

附件:
您所在的用户组无法下载或查看附件接着我们完成这些方法:其中SaveProduct方法用于更新和插入数据,这里使用了LINQ to SQL语句。
public class AcademeService : IAcademeService
{
public List<Product> GetAllProducts()
{
AcademeDataContext db = new AcademeDataContext();
var products = from p in db.Products
select p;
return products.ToList<Product>();
}
public Product SaveProduct(Product product)
{
AcademeDataContext db = new AcademeDataContext();
if (product.ProductID > 0)
{
//更新记录
db.Products.Attach(product, true);
}
else
{
//插入记录
db.Products.InsertOnSubmit(product);
}
db.SubmitChanges();
return product;
}
public void DeleteProduct(Product product)
{
AcademeDataContext db = new AcademeDataContext();
db.Products.Attach(product, true);
db.Products.DeleteOnSubmit(product);
db.SubmitChanges();
}
}
第四步:配置web.cofig文件。只需要把wsHttpBinding改为basicHttpBinding
<serviceBehaviors>
<behavior name="AcademeServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExcepti/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorC
name="AcademeService">
<endpoint address="" binding="basicHttpBinding"
c>
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding"
c/>
</service>
</services>
</system.serviceModel>
第五步:设置Web应用程序的端口号。把器端口号设置为固定端口52600,在浏览器中查看服务是否正常。
到此,编译一下Web项目,我们已经完成了所有的事情了,下一步就是在Silverlight中调用这个服务了。
这篇就写到这里了。下一篇完成在Silverlight中调用。