0
내가 가진 및 데이터 서비스를 통해 노출 엔티티 프레임 워크 프로젝트에 연관된 객체를 추가 할 수 없습니다 :제대로 엔티티 프레임 워크 컨텍스트
public class VersionContext : DbContext
{
public DbSet<VersionTreeEntry> VersionTreeEntries { get; set; }
public DbSet<PluginState> PluginStates { get; set; }
public static void SetForUpdates()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<VersionContext, Configuration>());
}
}
public class VersionTreeEntry
{
public VersionTreeEntry()
{
Children = new List<VersionTreeEntry>();
PluginStates = new List<PluginState>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public virtual ICollection<VersionTreeEntry> Children { get; set; }
public virtual ICollection<PluginState> PluginStates { get; set; }
public virtual VersionTreeEntry Ancestor { get; set; }
/// <summary>
/// Links to the ProtoBufDataItem Id for the session state.
/// </summary>
public int DataId { get; set; }
public string Notes { get; set; }
[Required]
public DateTime TimeStamp { get; set; }
[MinLength(1, ErrorMessage = "Tag cannot have a zero length")]
[MaxLength(20, ErrorMessage = "A tag name cannot contain over 20 characters")]
public string Tag { get; set; }
public bool IsUiNodeExpanded { get; set; }
[Required]
public string Version { get; set; }
[Required]
public string SessionName { get; set; }
}
public class PluginState
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string PluginName { get; set; }
[Required]
public byte[] Data { get; set; }
}
를 지금까지 내가, 데이터 클래스가 올바르게 정의되어 볼 수 있습니다. 나는 그대로의 관계로, 새로운 객체를 생성하고 컨텍스트에 추가하려고 :
var session = new Session();
session.SessionName = "My new session";
VersionTreeEntry versionTreeEntry = new VersionTreeEntry();
versionTreeEntry.SessionName = session.SessionName;
versionTreeEntry.Version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
versionTreeEntry.TimeStamp = DateTime.Now;
_versionContext.AddToVersionTreeEntries(versionTreeEntry);
foreach (var plugin in session.Plugins)
{
using (var ms = new MemoryStream())
{
plugin.SaveState(ms);
PluginState state = new PluginState();
state.PluginName = plugin.PluginName;
state.Data = ms.ToArray();
versionTreeEntry.PluginStates.Add(state);
}
}
_versionContext.SaveChanges();
문제는 PluginState 인스턴스가 실제로 데이터베이스에 추가 만나지 것입니다. 컨텍스트에 수동으로 추가하는 코드를 추가하면 추가되지만, VersionTreeEntry를 가리키는 외래 키는 null입니다.
다시 말하지만, 이것은 바닐라 EF가 아닌 WCF DataService입니다. 잘못된 생각일까요?
건배
당신이 방법을 추가하기 위해 호출 후 forloop에 코드에 다음 줄을 추가 할 수 있습니다 :이 작업을 수행하는 가장 좋은 방법은 다음과 같은 API를 호출하는 것입니다 , "PluginStates", 주). 희망이 도움이됩니다. – Pratik
감사합니다. 나에게 대답처럼 들리네. 또한 양쪽 줄을 _versionContext.AddRelatedObject (versionTreeEntry, "PluginStates", state)로 바꿀 수 있습니다. – Avram