当外键没有ID后缀时,Fluent的Fluent映射

时间:2014-07-24 05:15:04

标签: entity-framework ef-code-first entity-framework-6

如何为下面的场景实现流畅的映射,我试过但是结果徒劳无功。

我有两个表Product和State,Product有列名State,它包含StateCode,如“WA”,“NJ”等字符串类型。所以我需要将State列填充到StateCode中,并将相关的State对象填充到product实体的State属性中。

以下是我正在使用的课程。我不想更改表的列

  public class Product
    {
        public int ID { get; set; }

        public State State { get; set; }

        public string StateCode { get; set; }

        public string Description { get; set; }

    }

    public class State
    {
        public int Id { get; set; }

        public string Code{get;set;}

        public string Description{get;set;}
    }

我尝试了以下产品

的映射
    this.Property(t => t.StateCode).HasColumnName("State");
        HasRequired(t => t.State).WithMany().HasForeignKey(t => t.StateCode);

2 个答案:

答案 0 :(得分:1)

不,目前在实体框架中引用非PK的外键列是不可能的。请检查此feature suggestion

如果您真的想拥有该功能,则需要执行自定义种子。

alter table Products add constraint FK_Products_States foreign key(State) references States(Code)

但您无法填充State个对象。放置public State State { get; set; }属性将自动创建引用State_ID的外键列States::ID

否则,您需要将引用StateCode的{​​{1}}更改为StateId (integer)

答案 1 :(得分:0)

引用表的ForeignKey和PrimaryKey的类型必须相同。因此,您需要将State类Id属性类型设置为string。在EF中,您只能使用指向主键的foreig键。