如何使实体键值由用户分配

发布于 2024-12-18 11:50:15 字数 1155 浏览 1 评论 0原文

我正在从另一个数据库检索数据,该数据库已经为每个“啤酒”实体创建了唯一的 ID。但是,当我将远程数据库中的唯一键值分配给新的“啤酒”对象时,一旦该对象插入数据库,它就会被替换。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using BeerRecommender.Models.ViewModels;

namespace BeerRecommender.Models
{
    public class Beer
    {
        public Beer()
        {
            Created = DateTime.Now;
            Updated = DateTime.Now;
        }

    [Key]
    public int ID { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    public Brewery Brewery { get; set; }

    public DateTime Created { get; set; }

    public DateTime Updated { get; set; }

    public ICollection<City> Cities { get; set; }

    public ICollection<Tag> Tags { get; set; }

    public Style Style { get; set; }
    }
}

我正在使用 UnitOfWork 模式。

UnitOfWork.BeerRepository.Insert(beer);
UnitOfWork.Save();

I'm retrieving data from another database that has already created unique IDs for each "beer" entity. However, when I assign the unique key value from the remote database to a new "beer" object, it gets replaced as soon as the object is inserted into the database.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using BeerRecommender.Models.ViewModels;

namespace BeerRecommender.Models
{
    public class Beer
    {
        public Beer()
        {
            Created = DateTime.Now;
            Updated = DateTime.Now;
        }

    [Key]
    public int ID { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    public Brewery Brewery { get; set; }

    public DateTime Created { get; set; }

    public DateTime Updated { get; set; }

    public ICollection<City> Cities { get; set; }

    public ICollection<Tag> Tags { get; set; }

    public Style Style { get; set; }
    }
}

I'm using the UnitOfWork pattern.

UnitOfWork.BeerRepository.Insert(beer);
UnitOfWork.Save();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枉心 2024-12-25 11:50:15

正如您已经发现的,EF 将为 int 主键生成值。要微调此行为,您需要使用 DatabaseGenerated 属性(或者您也可以使用 Fluent apiHasDatabaseGenerateOption 方法):

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }

As you already discovered, EF will generate values for int primary keys. To fine tune this behavior you need to mark your key with the DatabaseGenerated attribute (or you can also configure this with the the fluent api's HasDatabaseGeneratedOption method):

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文