实体框架如何在数据库优先的方法中确定主键
本文关键字:方法 框架 数据库 实体 | 更新日期: 2023-09-27 18:04:54
我有以下三个模型类在我的sql server 2008,我使用ado.net实体框架映射表:-
数据库中ITSwitchPort表的主键是TechnologyID &SwitchID:
public partial class ITSwitchPort
{
public int TechnologyID { get; set; }
public int SwitchID { get; set; }
public string PortNumber { get; set; }
public virtual Technology Technology { get; set; }
public virtual ITSwitch ITSwitch { get; set; }
}
数据库中Technology表的主键是:
public partial class Technology
{
public Technology()
{
this.ITServers = new HashSet<ITServer>();
this.ITSwitchPorts = new HashSet<ITSwitchPort>();
this.TechnologyAudits = new HashSet<TechnologyAudit>();
this.TechnologyIPs = new HashSet<TechnologyIP>();
}
public int TechnologyID { get; set; }
public string Tag { get; set; }
public bool IsDeleted { get; set; }
public byte[] timestamp { get; set; }
public Nullable<int> TypeID { get; set; }
public Nullable<System.DateTime> StartDate { get; set; }
public Nullable<long> IT360ID { get; set; }
public bool IsCompleted { get; set; }
public Nullable<long> PartialTag { get; set; }
public bool IsManaged { get; set; }
public virtual ICollection<ITSwitchPort> ITSwitchPorts { get; set; }
}
数据库中ITSwitch表的主键是SwitchID:
public partial class ITSwitch
{
public ITSwitch()
{
this.ITSwitchPorts = new HashSet<ITSwitchPort>();
}
public int SwitchID { get; set; }
public Nullable<int> ModelID { get; set; }
public string Spec { get; set; }
public int RackID { get; set; }
public Nullable<int> ConsoleServerID { get; set; }
public string Description { get; set; }
public long IT360SiteID { get; set; }
public byte[] timestamp { get; set; }
public string ConsoleServerPort { get; set; }
public virtual SwitchModel SwitchModel { get; set; }
public virtual Technology Technology { get; set; }
public virtual ITRack ITRack { get; set; }
public virtual ICollection<ITSwitchPort> ITSwitchPorts { get; set; }
}
现在,如果我尝试更新ITSwitchPort。SwitchID,我会得到一个错误,SwitchID是密钥的一部分,无法更新,所以我的问题是实体框架如何确定上面三个模型的密钥?
虽然你的问题已经解决了,但你的问题仍然没有得到回答。
问题是,Entity-Framework如何知道一个属性是表的主键- DbFirst。
答案是,一旦你首先使用数据库,实体框架会自动添加实体和表之间的映射,其中一个映射如下:
this.HasKey(a => a.TechnologyID );
中的技术映射类。(自动生成)
通过这段代码,entity - framework知道哪个属性是主键。