如何使用户指定的实体键值

时间:2011-11-26 07:36:27

标签: linq asp.net-mvc-3 entity-framework-4.1 ef-code-first unit-of-work

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

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();

1 个答案:

答案 0 :(得分:1)

正如您已经发现的,EF将为int主键生成值。要微调此行为,您需要使用DatabaseGenerated属性标记您的密钥(或者您也可以使用fluent apiHasDatabaseGeneratedOption方法对其进行配置):

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