gpt4 book ai didi

ef-code-first - Entity Framework 5 : Using DatabaseGeneratedOption. 计算选项

转载 作者:行者123 更新时间:2023-12-03 09:24:19 24 4
gpt4 key购买 nike

我有一个使用 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 属性的 EF5 代码第一个项目。此选项将覆盖我的设置。

考虑这个 SQL 表:

CREATE TABLE Vehicle (
VehicleId int identity(1,1) not null,
Name varchar(100) not null default ('Not Set')
)

我正在使用 SQL 默认构造来设置 [Name],如果未设置它。

在后面的代码中,我定义了一个类似于以下内容的类:
public class Vehicle {
...

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public string ShoulderYN { get; set; }
}

当我在代码中更新实体时,默认设置的值会覆盖我的新设置。

在代码中,我有(伪):
vehicle.Name = 'Update Name of Vehicle';
_dbContext.Update(vehicle);
_dbContext.SaveChanges();

预期结果是 Vehicle.Name = '更新车辆名称'。

实际结果是 Vehicle.Name = 'Not Set'。

EF5 中有没有办法说“如果 Vehicle.Name 为空/空,则使用数据库中定义的值?否则,如果我在代码中设置该值,我想使用该值。”

谢谢。

史蒂夫

最佳答案

显然,不,没有。这不是那么聪明:)
您可能已经读过,Computed 选项只是告诉 EF 不要更新您的列,因为您将自己在 DB 端计算一个值。然后 EF 将从您的数据库中返回新计算的值(在您的情况下为“未设置”)。
您的基本三个选项是 - 根据 EF 源代码文档:

  • 无 - 数据库不生成值。
  • 身份 - 数据库在插入一行时生成一个值。
  • 已计算 - 数据库在插入或更新行时生成一个值。

  • https://github.com/aspnet/EntityFramework6/blob/527ae18fe23f7649712e9461de0c90ed67c3dca9/src/EntityFramework/DataAnnotations/Schema/DatabaseGeneratedOption.cs
    由于您希望完成更多的自定义逻辑,因此恐怕您必须自己完成。我建议您停止依赖数据库默认约束,并以代码优先的方式做所有事情。这样你就会有一个这样的代码:
    public class Vehicle
    {
    public Vehicle()
    {
    this.Name = "Not set";
    }

    // Without 'Generated' attribute
    public string Name { get; set; }
    }
    这样,当您的实体创建时,它会自动以预期的默认值启动。并且可以稍后通过简单地修改 Name 属性来更改。
    希望有帮助!

    关于ef-code-first - Entity Framework 5 : Using DatabaseGeneratedOption. 计算选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17600556/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com