为什么默认值的 bool 属性 不能设置为不同的值?
Why bool property with default value couldn't set with different value?
我在我的 csharp 实体 class 中将布尔值 Active 属性 的默认值设置为 true。但我不能在我的方法中将其设置为 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);
一个 bool
可以有两个值,true
或 false
。您已将默认值设置为 true
。这意味着如果您执行插入,它将是 true 而不是列的默认值。该列的默认值为 false
。 EF 无法判断 false
是设置为默认值还是显式设置为值,因此 false
的值将始终被默认值 true
覆盖。一种选择是使列和可为空的布尔值 (bool?
)。那么默认值将是 ne null
并且您的显式 false
值将被保留并输入到数据库中。
我在我的 csharp 实体 class 中将布尔值 Active 属性 的默认值设置为 true。但我不能在我的方法中将其设置为 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);
一个 bool
可以有两个值,true
或 false
。您已将默认值设置为 true
。这意味着如果您执行插入,它将是 true 而不是列的默认值。该列的默认值为 false
。 EF 无法判断 false
是设置为默认值还是显式设置为值,因此 false
的值将始终被默认值 true
覆盖。一种选择是使列和可为空的布尔值 (bool?
)。那么默认值将是 ne null
并且您的显式 false
值将被保留并输入到数据库中。