【发布时间】:2019-08-26 04:14:52
【问题描述】:
我正在尝试使用 ef 核心在 asp.net 核心中实现 valueobject。我有金钱作为价值对象,产品有金钱作为价格属性。问题是货币在产品表中被序列化,但反序列化返回 null。我尝试了调试模式,但它甚至没有进入反序列化的货币类。 注意:我使用 [NotMapped] 是因为迁移给了我金钱需要主键的错误,但我不需要钱表,我希望将钱序列化为产品表中的价格字段。 我的金钱模式:
[NotMapped]
public class Money
{
public static readonly Money Empty = new Money(0);
public decimal Value { get; private set; }
protected Money()
{
}
public Money(decimal value) : this()
{
if (value < 1)
throw new Exception("value is invalid");
Value = value;
}
}
我的产品型号:
public class Product
{
public Product()
{
}
public Product(string name, decimal price)
{
if (string.IsNullOrEmpty(name))
throw new Exception("Name is invalid");
Name = name;
Price = new Money(price);
}
public int Id { get; private set; }
public string Name { get; private set; }
public Money Price { get; private set; }
}
我的数据库上下文:
public class StoreDbContext:DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=XXX;initial catalog=Basket2;integrated security=true");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new ProductConfiguration());
//modelBuilder.Entity<Product>()
// .HasKey(lc => new { lc.Id });
}
public DbSet<Order> Orders{ get; set; }
public DbSet<OrderLine> OrderLines{ get; set; }
public DbSet<Product> Products{ get; set; }
}
我的产品配置:
public class ProductConfiguration : IEntityTypeConfiguration<Product>
{
public void Configure(EntityTypeBuilder<Product> builder)
{
var test= builder.Property(c => c.Price).
HasConversion(c => JsonConvert.SerializeObject(c), c => JsonConvert.DeserializeObject<Money>(c));
}
}
【问题讨论】:
标签: c# domain-driven-design value-objects