【发布时间】:2023-04-07 03:23:01
【问题描述】:
我已将 true 设置为我的 csharp 实体类中的布尔 Active 属性的默认值。但我不能在我的方法中将其设置为 false。我将其设置为 false,但在调用存储库模式服务实例的 Save 方法后,我再次看到它是 true。为什么会发生?
public class BaseEntity
{
[Key]
public int Id { get; set; }
private DateTime createdAt;
public DateTime CreatedAt
{
get
{
if (createdAt == null)
{
createdAt = DateTime.Now;
}
return createdAt;
}
set { createdAt = value; }
}
public bool Active { get; set; }
[DefaultValue(false)]
public bool Deleted { get; set; }
public DateTime? UpdatedAt { get; set; }
public BaseEntity()
{
if (createdAt == null)
{
CreatedAt = DateTime.Now;
}
}
}
public class OrderDetail:BaseEntity
{
public Item Item { get; set; }
public decimal Amount { get; set; }
public decimal Price { get; set; }
public decimal TotalPrice { get; set; }
public string Token { get; set; }
public DateTime? TokenExpire { get; set; }
}
数据库保存设置为假:
foreach (var cartItem in orderingItems)
{
var item = ItemService.GetById(cartItem.Item.Id);
if (item != null)
{
var orderDetail = new OrderDetail
{
CreatedAt=DateTime.Now,
Amount = cartItem.Count,
Item = item,
Price = item.Price.HasValue ? item.Price.Value : 0
};
orderDetail.Active = false;
orderDetailList.Add(orderDetail);
}
}
decimal totalOrderAmountValue = orderingItems.Sum(i => i.Item.Price);
string totalOrderAmount = totalOrderAmountValue.ToString("F", CultureInfo.GetCultureInfo("en"));
var newOrder = new Order();
newOrder.Active = false;
newOrder.OrderDetails = orderDetailList;
newOrder.CreatedAt = DateTime.Now;
newOrder.Owner = orderUser;
OrderService.Insert(newOrder);
OrderService.Save();
在数据库中设置默认值的迁移代码:
builder.Entity<OrderDetail>().Property<bool>("Active").HasDefaultValue(true);
【问题讨论】:
-
default(bool) == false。无法区分未修改和明确的false。相反,您可以使用带有属性get => _value ?? true;的bool?私有字段。 EF Core 应加载/保存该字段。 -
那不是迁移,那是 DbContext 模型配置。
false是布尔值的默认值。你在哪里设置为true?如果您想默认为false,则无需执行任何操作。你的问题是I have set true as default value of my boolean Active property -
我修好了。它必须是“真实的”。
-
我要求您发布您的 EF 代码的原因是我们仍然不知道发生了什么。仍然没有将
Active的默认值设置为true 的代码。模型配置方法仍然缺失。builder.Entity<OrderDetail>().Property<bool>("Active").HasDefaultValue(false);只是其中的一部分。是否有一个触发器可以设置数据库中的字段? -
让我也检查一下触发的东西。
标签: c# entity-framework-core repository-pattern