在实体框架的 Json Post 中使用 NotMapped 属性

问题描述 投票:0回答:2

我正在使用带有 Web API 的 Code-First 实体框架。我需要从 fiddler 发送针对控制器中的 post 方法的测试模型对象。 该模型具有以下参数:

[Key]
public int ID { get; set; }
public string Caption { get; set; }
[JsonIgnore]
public byte[] Image { get; set; }
[NotMapped]
public string ImageDataString { get; set; }

ImageDataString 是我的图像的字符串表示形式。它不应该成为数据库中的一列;因此,它被标记为NotMapped。当我进行转换时,它的目的就结束了:

protected override UserImage CreateEntity(UserImage entity)
{
    entity.Image = Convert.FromBase64String(entity.ImageDataString);

因为从客户端传递字符串而不是 byte[] 更容易。

现在的目标是能够模拟从 fiddler 发送实体对象。因为属性未映射,所以实体显示为空。如果我删除 [NotMapped] 标签,实体对象将被很好地填充。

这是我的提琴手在撰写中的正文信息:

{ "Caption":"你好世界", “ImageDataString”:“/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCkkR1N/DVrd6ikBgtNZtv9H1SxAWUJsnX5mVGGZZdSxtB0anyfZ9z7TgLjnH8J5” }

如何结合使用 NotMapped 来停止在数据库中创建列,但同时仍然能够在发布过程中使用它? EF 本质上不可能吗?你还有什么建议?

c# json entity-framework fiddler
2个回答
0
投票

我建议您的实体仅保存要进入数据库的字段。

创建一个单独的视图模型以发送到视图,其中您具有 imagedatastring 属性。如果你愿意,你甚至可以让它继承实际的实体。


0
投票

所以最好不要使用实体模型作为请求或响应模型, 但在这种情况下,也许尝试在 DbContext 类中尝试使用 Fluent API,而不是处理 [NotMapped] 属性。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<YourEntityName>().Ignore(x => x.ImageDataString);
}

然后您可以删除 NotMapped 属性。

© www.soinside.com 2019 - 2024. All rights reserved.