Chr*_*rie 6 asp.net-mvc entity-framework ef-code-first
我正在使用Entity Framework从现有数据库表生成模型.在"实体数据模型向导"中,我选择了"数据库中的代码优先"选项,为我提供了POCO类.每个类都应镜像数据库表,并包含与表中的列对应的属性.
问题是,当我运行项目时,我得到与实际数据库中不存在的导航属性相关的错误.这些是典型的EF生成的导航属性:
Invalid column name 'Attribute_AttributeId' and Invalid column name 'Shift_ShiftId'
Run Code Online (Sandbox Code Playgroud)
数据库中没有实际的字段,因为(我相信)这些动态导航字段是在运行时创建的:
为了完整起见,这里是导致此错误的'Driver'模型.有很多"虚拟"属性在运行时创建一个新类(动态代理)来创建加载导航属性的逻辑:
namespace IntrinsicDataLoader.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
public partial class Driver
{
public Driver()
{
DriverTrackings = new HashSet<DriverTracking>();
DriverVehicles = new HashSet<DriverVehicle>();
}
public int DriverId { get; set; }
public Guid DriverGuid { get; set; }
public long ActivityLogId { get; set; }
[Required]
[StringLength(10)]
public string DriverNumber { get; set; }
public long TransportProvideId { get; set; }
[Required]
[StringLength(50)]
public string FirstName { get; set; }
[Required]
[StringLength(50)]
public string LastName { get; set; }
public int? ShiftPatternId { get; set; }
[Required]
[StringLength(50)]
public string Password { get; set; }
[StringLength(50)]
public string Status { get; set; }
public DateTime? LastActive { get; set; }
[StringLength(50)]
public string DriverType { get; set; }
[StringLength(50)]
public string AKA { get; set; }
[StringLength(500)]
public string HomeAddress { get; set; }
[StringLength(100)]
public string Email { get; set; }
[StringLength(20)]
public string MobilePhone { get; set; }
[StringLength(20)]
public string OtherPhone { get; set; }
[StringLength(10)]
public string Gender { get; set; }
[StringLength(50)]
public string Ethnicity { get; set; }
public DateTime StartDate { get; set; }
[Required]
[StringLength(50)]
public string Badge { get; set; }
public DateTime BadgeExpiry { get; set; }
[Required]
[StringLength(50)]
public string BadgeType { get; set; }
[Required]
[StringLength(50)]
public string LicenceNumber { get; set; }
public DateTime LicenceExpiry { get; set; }
public DateTime? SchoolBadgeExpiry { get; set; }
[StringLength(20)]
public string NINumber { get; set; }
public bool? ApplyVAT { get; set; }
public decimal? VATRate { get; set; }
public decimal? Balance { get; set; }
public decimal? CommissionPercentage { get; set; }
[StringLength(50)]
public string PoliceDisclosure { get; set; }
public DateTime? ProofOfAddressSupplied { get; set; }
public DateTime? AgreementSignDate { get; set; }
public int? PhotoId { get; set; }
public bool? IsActive { get; set; }
public bool? IsDeleted { get; set; }
[Column(TypeName = "date")]
public DateTime? DateUpdated { get; set; }
[Column(TypeName = "date")]
public DateTime? DateInserted { get; set; }
[StringLength(50)]
public string UpdatedBy { get; set; }
[StringLength(50)]
public string InsertedBy { get; set; }
public virtual DriverActivityLog DriverActivityLog { get; set; }
public virtual TransportProvider TransportProvider { get; set; }
public virtual ICollection<DriverTracking> DriverTrackings { get; set; }
public virtual ICollection<DriverVehicle> DriverVehicles { get; set; }
public virtual Attribute Attribute { get; set; }
public virtual Shift Shift { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
有错误与我正在使用的联结表特别相关.我理解,作为联结表的唯一功能是创建多对多关系,EF只是将其转换为多对多关系 - 因此联结表本身变得透明 - 就像它不存在 - 但能力访问关系仍然存在.为了支持这一点,我没有为"DriverAttribute"或"DriverShift"生成任何类,而是为其他相关表做了诸如'Attribute','Shift','TransportProvider','DriverVehicle'等.
这一切都很好,但我坚持这个错误.我需要做什么来修改模型类以停止错误.从我目前的知识立场来看,一切似乎都是正确的.
当我尝试引用Driver模型时出现问题.以下是相关表格的更详细视图 - 包括那些没有错误的表格:

您似乎缺少导航属性:
public int ShiftId{ get; set; }
public int AttibuteId { get; set; }
Run Code Online (Sandbox Code Playgroud)
这些会将您的驱动程序表与这些虚拟关系链接起来:
public virtual Attribute Attribute { get; set; }
public virtual Shift Shift { get; set; }
Run Code Online (Sandbox Code Playgroud)
问候,
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |