2016-11-18 5 views
3

特定のIDをエンティティに指定してからepiserverに動的データストアを使用して永続化する場合、そのエンティティは永続化されません。チュートリアルによると、これはうまくいったはずです。すべての手がかりは?例外はスローされず、Save呼び出しはIDを指定したエンティティのIDを返します。IDを指定するときにDDSがエンティティを保存しない

var winnerEntity = new DailyXMasLotteryWinner 
{ 
    Id = Identity.NewIdentity(guid), 
    FullName = fullName, 
    Email = email, 
    Phone = phone, 
    WinnerTime = DateTime.Now 
} 

winnerStore.Save(winnerEntity); // does not persist to database! 
winnerStore.Items().Count() == 0; 
winnerEntity.Id = null; 
winnerStore.Save(winnerEntity); // persists to database just fine! 
winnerStore.Items().Count() == 1; 
+1

「Id」プロパティ名が保護されている可能性があります。その値は、既存のオブジェクトを上書きする場合にのみ設定する必要がありますか?言い換えれば、あなたの財産が代わりに "WinnerId"と呼ばれた場合、それはうまくいくでしょうか? –

+0

'guid'パラメータには何が含まれていますか、どのように構成しますか? –

+0

これはガイドです。 Guid.NewGuid()によって作成されました – oligofren

答えて

0

私はあなたのパターンを認識していないんだけど、これは、私は通常、DDS

using System; 
using System.Linq; 
using EPiServer.Data; 
using EPiServer.Data.Dynamic; 
using EPiServer.ServiceLocation; 

namespace Herlitz.EPiBlog.Models.DDS 
{ 

    public interface IDailyXMasLotteryWinner 
    { 
     DailyXMasLotteryWinner Create(string fullName); 

     DailyXMasLotteryWinner Get(string fullName); 

     bool Exist(string property, string value); 
    } 

    [ServiceConfiguration(typeof(IDailyXMasLotteryWinner))] 
    public class DailyXMasLotteryWinner : IDailyXMasLotteryWinner //,IDynamicData 
    { 
     private readonly DynamicDataStore _store = DynamicDataStoreFactory.Instance.CreateStore(typeof(DailyXMasLotteryWinner)); 

     public Identity Id { get; set; } 

     public string FullName { get; set; } 

     public DailyXMasLotteryWinner Create(string fullName) 
     { 
      if (Exist(property: "FullName", value: fullName)) 
      { 
       return Get(fullName: fullName); 
      } 

      Id = Identity.NewIdentity(Guid.NewGuid()); 
      FullName = fullName; 

      _store.Save(this); 
      return this; 
     } 

     public DailyXMasLotteryWinner Get(string fullName) 
     { 
      return _store.Find<DailyXMasLotteryWinner>(propertyName: "FullName", value: fullName).FirstOrDefault(); 
     } 

     public bool Exist(string property, string value) 
     { 
      return _store.Find<DailyXMasLotteryWinner>(propertyName: property, value: value).Any(); 
     } 
    } 
} 

この

@{ 

    var xmasLocator = ServiceLocator.Current.GetInstance<IDailyXMasLotteryWinner>(); 
    var winner = xmasLocator.Create(fullName: "Ned Flanders"); 

    <div>@winner.Id @winner.FullName</div> 
} 

でテストされ、それが

enter image description here

の作品実装方法です

明らかにこれをあなたのパターンに適応させるべきです、もしうまくいかない場合は、あなたのデータベースユーザが不十分な権利を持つでしょう。