我有一个字符串字典,我希望用户能够添加/删除信息然后存储它们,以便他们可以在下次程序重新启动时访问它
我不知道如何将字典存储为设置.我看到在system.collections.special下有一个叫做stringdictionary的东西,但我读过SD已经过时了,不应该使用它.
同样在将来我可能需要存储一个不仅仅是字符串的字典(int string)
如何在.net应用程序的设置文件中存储字典?
我正在使用EF 4.1,并且因缺乏枚举支持而寻找一个很好的解决方法.int的支持属性似乎是合乎逻辑的.
[Required]
public VenueType Type
{
get { return (VenueType) TypeId; }
set { TypeId = (int) value; }
}
private int TypeId { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,如何将此属性设为私有并仍然映射它.换一种说法:
如何首先使用EF 4.1代码映射私有属性?
我有一个类,我想保留元数据 - 有几个交互场景,所以meta允许我为不同的交互类型保留不同的元.
class Feed()
{
Guid FeedId { get; set; }
ObjectMetaDictionary Meta { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望EF能够序列化这个ObjectMetaDictionary并将其作为字符串/ VarChar存储在数据库中.当我检索一条记录时,我希望它被反序列化为ObjectMetaDictionary.
EF支持吗?我该怎么做?
我正在使用Entity Framework Code First.
解决:我在下面提供了一个解决我的问题的答案.一旦SO允许我,我会接受这个答案.
问题: Entity Framework Core 3.0 中是否有一种方法可以在支持字段上应用值转换?
上下文: 假设我有一个博客实体,其中包含表示帖子 ID 的字符串值列表。我想避免需要连接实体/表(如此处所述),因此我进行转换以将列表作为字符串存储在数据库中。我还想保护我的模型不被直接通过 PostIds 属性修改,因此我想为此使用支持字段(如此处所述)。
像这样的东西:
public class Blog
{
public int BlogId { get; set; }
private readonly List<string> _postIds;
public IReadOnlyCollection<string> PostIds => _postIds;
public Blog()
{
_posts = new List<Post>();
}
}
Run Code Online (Sandbox Code Playgroud)
上下文的配置看起来像这样:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Configuring the backing field
modelBuilder.Entity<Blog>()
.Metadata
.FindNavigation(nameof(Blog.PostIds))
.SetPropertyAccessMode(PropertyAccessMode.Field);
// Trying to configure the value conversion, but that doesn't work...
modelBuilder.Entity<Blog>()
.Property(e => …Run Code Online (Sandbox Code Playgroud) 我有以下 json
"PayloadData": {
"CustomFields": ['test','test2'],
"SampleNumber":"123"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用下面的代码来反序列化 json。
Message message = JsonConvert.DeserializeObject<Message>(payloadData);
Run Code Online (Sandbox Code Playgroud)
这是我在Message课堂上的财产
/// <summary>
/// Gets or sets CustomFields
/// </summary>
[Required]
[DataMember(Name = "CustomFields")]
public List<string> CustomFields{ get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,我得到以下错误。
“无法映射属性 'Message.CustomFields',因为它的类型是 'string[]',它不是受支持的原始类型或有效的实体类型。要么显式映射此属性,要么使用 '[NotMapped ]' 属性或通过在 'OnModelCreating' 中使用 'EntityTypeBuilder.Ignore'。”
我的项目使用 EF Core 3.1,并以 Azure Cosmos 作为数据库。
我有一个这样的实体:
public class MyEntity
{
public IEnumerable<string> Names {get;set;}
... other fields
}
Run Code Online (Sandbox Code Playgroud)
我希望最终得到这样的 Cosmos 文档:
{
"Names": ["Name1", "Name2"]
}
Run Code Online (Sandbox Code Playgroud)
对于实体 ( IEnumerable<string>) 我收到错误:
无法映射属性“MyEntity.Names”,因为它的类型为“IEnumerable”,该类型不是受支持的基元类型或有效的实体类型。
如果我将实体更改为:
public class NameEntity
{
public string Name {get;set;}
}
public class MyEntity
{
public IEnumerable<NameEntity> Names {get;set;}
... other fields
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>(e =>
{
e.OwnsMany(p => p.Identifiers);
});
}
Run Code Online (Sandbox Code Playgroud)
该文档如下所示:
{
"Id": "XXXXXX",
"Names:" [
{},
{}
],
} …Run Code Online (Sandbox Code Playgroud)