gpt4 book ai didi

entity-framework - 是否可以在EF实体中嵌入对象(在保存时序列化,在访问时反序列化)?

转载 作者:行者123 更新时间:2023-12-03 12:14:09 25 4
gpt4 key购买 nike

我有一类要保留元数据的类-有几种交互方案,因此meta允许我为不同的交互类型保留不同的meta。

class Feed()
{
Guid FeedId { get; set; }
ObjectMetaDictionary Meta { get; set; }
}

我希望EF序列化此ObjectMetaDictionary,并将其存储为数据库中的字符串/ VarChar。当我检索记录时,我希望将其反序列化为ObjectMetaDictionary。

EF支持吗?我该怎么做?

我正在使用Entity Framework Code First。

解决:我在下面提供了一个可以解决我的问题的答案。 SO允许我尽快接受此答案。

最佳答案

显然,这实际上很容易。感谢以前的SO answer的帮助,我能够使它工作。

通过OnModelCreating的流畅配置,我们可以告诉EF用作序列化到数据库并再次退出的value属性。

这是我的解决方案:

public class Feed
{
public virtual Guid FeedId { get; set; }

public virtual FeedMetaData Meta { get; set; }

public virtual string Title { get; set; }
public virtual string Description { get; set; }

}

public class FeedMetaData
{
public Dictionary<string, string> Data { get; set; }

public string Serialized
{
get { return JsonConvert.SerializeObject(Data); }
set
{
if(string.IsNullOrEmpty(value)) return;

var metaData = JsonConvert.DeserializeObject<Dictionary<string, string>>(value);

Data = metaData ?? new Dictionary<string, string>();
}
}

// addl code removed...
}

public class FeedsDbContext : DbContext
{
public DbSet<Feed> Feeds { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<FeedMetaData>()
.Property(p => p.Serialized)
.HasColumnName("Meta");
modelBuilder.ComplexType<FeedMetaData>().Ignore(p => p.Data);

base.OnModelCreating(modelBuilder);
}
}

关于entity-framework - 是否可以在EF实体中嵌入对象(在保存时序列化,在访问时反序列化)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com