如何为下面的场景实现流畅的映射,我试过但是结果徒劳无功。
我有两个表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);
答案 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键。