WCF RIA Services를 처음 사용하며 LightSwitch를 4 개월 이상 사용해 왔습니다. LightSwitch 응용 프로그램 전체에서 조회 테이블을 편집하는 데 사용되는 일반 화면을 만들었습니다. 대부분 동적 인 다른 엔티티 세트와 함께 사용할 수있는 일반 화면을 만드는 방법을 배우기 위해서입니다. WCF RIA 서비스가있는 재사용 가능한 일반 LightSwitch 화면
화면
은 매우 간단하다 :Application.ShowLookupTypesList("StatusTypes", "StatusTypeId");
데이터베이스의 조회 테이블의 엔티티 집합에 해당합니다
가 여기 내 WCF RIA 서비스 코드입니다 : 내가 실행 화면에서 목록에 항목을 추가 할 때
using System.Data.Objects.DataClasses;
using System.Diagnostics;
using System.Reflection;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;
using System.ServiceModel.DomainServices.EntityFramework;
using System.ServiceModel.DomainServices.Server;
namespace WCF_RIA_Project
{
public class LookupType
{
[Key]
public int TypeId { get; set; }
public string Name { get; set; }
}
public static class EntityInfo
{
public static Type Type;
public static PropertyInfo Key;
public static PropertyInfo Set;
}
public class WCF_RIA_Service : LinqToEntitiesDomainService<WCSEntities>
{
public IQueryable<LookupType> GetLookupTypesByEntitySet(string EntitySetName, string KeyName)
{
EntityInfo.Set = ObjectContext.GetType().GetProperty(EntitySetName);
EntityInfo.Type = EntityInfo.Set.PropertyType.GetGenericArguments().First();
EntityInfo.Key = EntityInfo.Type.GetProperty(KeyName);
return GetTypes();
}
[Query(IsDefault = true)]
public IQueryable<LookupType> GetTypes()
{
var set = (IEnumerable<EntityObject>)EntityInfo.Set.GetValue(ObjectContext, null);
var types = from e in set
select new LookupType
{
TypeId = (int)EntityInfo.Key.GetValue(e, null),
Name = (string)EntityInfo.Type.GetProperty("Name").GetValue(e, null)
};
return types.AsQueryable();
}
public void InsertLookupType(LookupType lookupType)
{
dynamic e = Activator.CreateInstance(EntityInfo.Type);
EntityInfo.Key.SetValue(e, lookupType.TypeId, null);
e.Name = lookupType.Name;
dynamic set = EntityInfo.Set.GetValue(ObjectContext, null);
set.AddObject(e);
}
public void UpdateLookupType(LookupType currentLookupType)
{
var set = (IEnumerable<EntityObject>)EntityInfo.Set.GetValue(ObjectContext, null);
dynamic modified = set.FirstOrDefault(t => (int)EntityInfo.Key.GetValue(t, null) == currentLookupType.TypeId);
modified.Name = currentLookupType.Name;
}
public void DeleteLookupType(LookupType lookupType)
{
var set = (IEnumerable<EntityObject>)EntityInfo.Set.GetValue(ObjectContext, null);
var e = set.FirstOrDefault(t => (int)EntityInfo.Key.GetValue(t, null) == lookupType.TypeId);
Debug.Assert(e.EntityState != EntityState.Detached, "Entity was in a detached state.");
ObjectContext.ObjectStateManager.ChangeObjectState(e, EntityState.Deleted);
}
}
}
, 나는 데이터를 충돌 를 수신 한 후, 저장을 편집하고 다시 저장 "다른 사용자가 삭제 한 이 기록. "
나는 쿼리가 저장 후 다시로드하여이를 해결할 수 있습니다,하지만 어색합니다.
동일한 이름의 항목을 제거한 다음 저장하고 읽은 다음 저장하면 데이터를 저장할 수 없습니다. "컨텍스트가 이미 동일한 리소스 Uri를 가진 다른 엔터티를 추적 중입니다." 이러한 문제의
모두는 WCF RIA 서비스를 사용하여 내 일반적인 화면에 영향을 미칩니다. 특정 데이터베이스 엔티티에 대한 ListDetail 화면을 작성할 때 문제가 없습니다. 내가 어떤 논리 나 아이디어를 놓친 것 같아?
LookupType_Created에서 실험했지만 기쁨이없는 임의의 ID를 시도했지만 화면 숨김 개체를 만들지 않습니다. 나는 InsertLookupType (RIA)에서 또한 시도했다.이전에이 솔루션을 실제로 읽었지만, 적용 할 경우 제 경우에 적용하는 방법을 잘 모릅니다. : -/응답 해 주셔서 감사합니다! –