代码之家  ›  专栏  ›  技术社区  ›  crauscher

WCF数据服务:SaveChanges:处理此请求时出错

  •  2
  • crauscher  · 技术社区  · 16 年前

    当我尝试将WPF应用程序中的某些更改保存到WCF数据服务时,出现“处理此请求时出错”异常。加载所有记录可以正常工作,但保存它们不起作用。

    希望你能帮忙。

    public partial class MainWindow : Window
    {
        private DBEntities _dbEntities;
    
        public MainWindow()
        {
            InitializeComponent();
            _dbEntities = new DBEntities(new Uri("http://localhost:49256/DataService.svc/"));
        }
    
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            foreach (var user in _dbEntities.User)
            {
                treeView1.Items.Add(user.Name);
            }
        }
    
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                _dbEntities.MergeOption = MergeOption.AppendOnly;
                User user = new User(){Age = 1, ID = Guid.NewGuid(), Name = "Test"};
                _dbEntities.AddToUser( user);
                _dbEntities.SaveChanges();
            } catch(Exception ex)
            {
                MessageBox.Show(ex.Message+ ex.InnerException.Message);
            }
        }
    }
    

    没有更多的异常详细信息。

    设置UseVerboseErrors=true后,将显示以下异常消息:

    无法更新EntitySet“User”,因为它具有DefiningQuery,并且元素中不存在支持当前操作的元素。

    2 回复  |  直到 16 年前
        1
  •  1
  •   David Hoerster    16 年前

    primary key identified . 您的实体是如何设置的(EF、linqtosql等)以及您的底层存储库是什么(SQL等)?我会相应地更新我的答案。希望这有帮助!

        2
  •  0
  •   Larissa Savchekoo    10 年前
    [ServiceBehavior(IncludeExceptionDetailInFaults=true)]
    public class WcfDataService1 : DataService<PhaetonServiceEntities>
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
            // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
            // Examples:
             config.SetEntitySetAccessRule("Cities", EntitySetRights.All);
            // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        }
    }