Silverlight中RIA Domain Service处理Relational Data

首先介绍一个比较好的入门资料:Taking a Tour of RIA Services, 可以先看下这个,本文可以看做一点儿小小的补充

http://msdn.microsoft.com/en-us/library/ff713719(v=VS.91).aspx

 

github代码地址:git@github.com:kiwiwin/silverlight-demo.git 。文件夹:ria-association-domain-service。因为跟数据库相关,可能直接跑不起来。

 

现在有两个表,分别是Book和Record,Record中含有一个外键bookId,只想Book的Id。我们希望在客户端得到一个借阅记录的表。

 

添加ADO.NET ENTITY Data Model: LibraryModel.edmx

添加Domain Service Class:LibraryService.cs(注意,在这之前需要先build .Web,不然不会找到上一步生成的Model)

选上Book和Record两个Table

 

在LibraryService.metadata.cs中有两个Table对应的数据结构的定义,找到Record:(可以好好看看里面自动生成的注释)

    // The MetadataTypeAttribute identifies RecordMetadata as the class
    // that carries additional metadata for the Record class.
    [MetadataTypeAttribute(typeof(Record.RecordMetadata))]
    public partial class Record
    {

        // This class allows you to attach custom attributes to properties
        // of the Record class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class RecordMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private RecordMetadata()
            {
            }

            public Book Book { get; set; }

            public int bookId { get; set; }

            public DateTime endTime { get; set; }

            public int id { get; set; }

            public DateTime startTime { get; set; }
        }
    }

 

这里虽然有Book,但是在LibraryService.cs中的 public IQueryable<Record> GetRecords()方法中,是不会返回Book对象的,如果需要,则需要在Book上加上Attribute Include

[Include]

public Book Book { get; set; }

 

然后修改public IQueryable<Record> GetRecords(),加上Include("Book")这样返回的对象才会包括Book

        public IQueryable<Record> GetRecords()
        {
            return this.ObjectContext.Records.Include("Book");
        }

 

这样就能从服务器端返回所有的Record和它对应的Book啦

 

在客户端显示,定义DomainDataSource和一个DataGrid

        <riaControls:DomainDataSource Name="libraryDataSource" LoadSize="20" AutoLoad="True" QueryName="GetRecords">
            <riaControls:DomainDataSource.DomainContext>
                <ds:LibraryContext/>
            </riaControls:DomainDataSource.DomainContext>
        </riaControls:DomainDataSource>
        <sdk:DataGrid AutoGenerateColumns="False" Width="600" Height="300" ItemsSource="{Binding Path=Data, ElementName=libraryDataSource}">
            <sdk:DataGrid.Columns>
                <sdk:DataGridTextColumn Binding="{Binding Book.Name}" Header="书名"/>
                <sdk:DataGridTextColumn Binding="{Binding Book.Isbn}" Header="ISBN"/>
                <sdk:DataGridTextColumn Binding="{Binding startTime}" Header="开始时间"/>
                <sdk:DataGridTextColumn Binding="{Binding endTime}" Header="结束时间"/>
            </sdk:DataGrid.Columns>
        </sdk:DataGrid>

 

运行吧骚年:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值