Пользовательская реализация домендервиста с использованием LINQ к SQL

может кто-нибудь указать мне на пример или кратко описывать, как можно было бы создать пользовательскую реализацию WCF RIA-сервисов Domainservice, используя LINQ для SQL В качестве слоя доступа к данным, но без использования файла .dbml (это связано с тем, что модель linq to SQL генерируется пользовательским инструментом, сильно прорезительно, и довольно большая база данных С 50+ таблицами) и без мастера VS2010 для создания доменсервиса (мастер зависит от доступов файла .dbml)

Вот действительно простая оболочка того, что я пробовал так далеко:

[EnableClientAccess()]
public class SubscriptionService : DomainService
{
    [Query(IsDefault = true)]
    public IQueryable<Subscription> GetSubscriptionList()
    {
        SubscriptionDataContext dc = new SubscriptionDataContext();
        var subs = dc.Subscription.Where(x => x.Status == STATUS.Active)
            .Select(x => 
            new Subscription
            {
                ID = x.ID,
                Name = x.Name
            }).ToList();

        return subs.AsQueryable();
    }

    public void InsertSubscription(Subscription sub)
    {
        if (!sub.ID.IsEmpty())
        {
            SubscriptionDataContext dc = new SubscriptionDataContext();
            Subscription tmpSub = dc.GetByID<Subscription>(sub.ID);
            if (tmpSub != null)
            {
                tmpSub.Name = sub.Name;
                dc.Save(tmpSub);
            }
            else
            {
                tmpSub = new Subscription();
                tmpSub.Name = sub.Name;
                dc.Save(tmpSub);
            }
        }
    }

    public void UpdateSubscription(Subscription sub)
    {
        if (!sub.ID.IsEmpty())
        {
            SubscriptionDataContext dc = new SubscriptionDataContext();
            Subscription tmpSub = dc.GetByID<Subscription>(sub.ID);
            if (tmpSub != null)
            {
                tmpSub.Name = sub.Name;
                dc.Save(tmpSub);
            }
        }
    }

    public void DeleteSubscription(Subscription sub)
    {
        if (!sub.ID.IsEmpty())
        {
            SubscriptionDataContext dc = new SubscriptionDataContext();
            Subscription tmpSub = dc.GetByID<Subscription>(sub.ID);
            if (tmpSub != null)
            {
                dc.Delete(tmpSub);
            }
        }
    }
}

Это, кажется, работает до сих пор. Кто-нибудь видят какие-либо проблемы с таким подходом, который мне может отсутствовать? Я не хочу идти слишком далеко по самой дороге с этим, если кто-то уже пробовал так и нашел с ним некоторые серьезные проблемы.

Спасибо за вклад каждого.

7
задан Dmitry Samuylov 14 September 2011 в 17:49
поделиться