如何扩展 Entity Framework 6 模型
Posted
技术标签:
【中文标题】如何扩展 Entity Framework 6 模型【英文标题】:How to extend an Entity Framework 6 model 【发布时间】:2014-11-07 14:39:39 【问题描述】:我正在尝试扩展 EF 6 代码优先模型,但出现错误。我已经搜索并找不到有关该问题的太多信息。我在同一个命名空间中创建了一个与我的模型同名的部分类。这是我的模型和扩展:
型号 -
namespace DataAccess.Models
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("Vehicle")]
public partial class Vehicle
public Vehicle()
WorkOrders = new HashSet<WorkOrder>();
public int VehicleID get; set;
public int CustomerID get; set;
[StringLength(17)]
public string VIN get; set;
public int Mileage get; set;
[StringLength(4)]
public string Year get; set;
[StringLength(50)]
public string Make get; set;
[StringLength(50)]
public string Model get; set;
[StringLength(50)]
public string Engine get; set;
[StringLength(50)]
public string BodyStyle get; set;
[StringLength(50)]
public string Transmission get; set;
[StringLength(50)]
public string Trim get; set;
[StringLength(50)]
public string Origin get; set;
public bool IsDeleted get; set;
[StringLength(25)]
public string License get; set;
public bool? Is4WD get; set;
[StringLength(25)]
public string Color get; set;
public string Notes get; set;
[StringLength(2)]
public string LicenseState get; set;
public virtual Customer Customer get; set;
public virtual ICollection<WorkOrder> WorkOrders get; set;
扩展 -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DataAccess.Models
public partial class Vehicle
public string CustomerName get; set;
我得到的错误是:
"支持 'AiContext' 上下文的模型自 数据库已创建。考虑使用 Code First 迁移来更新 数据库 (http://go.microsoft.com/fwlink/?LinkId=238269)。"
我在尝试调用存储过程时收到此错误。更具体地说,它被扔在这条线上:
using (ObjectContext objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dbContext).ObjectContext)
这个方法:
public List<Vehicle> SearchVehicles(string vin,
string license,
string year,
string make,
string model)
SqlParameter vinParameter;
if (vin != null)
vinParameter = new SqlParameter("vin", vin);
else
vinParameter = new SqlParameter("vin", "");
SqlParameter licenseParameter;
if (license != null)
licenseParameter = new SqlParameter("license", license);
else
licenseParameter = new SqlParameter("license", "");
SqlParameter yearParameter;
if (year != null)
yearParameter = new SqlParameter("year", year);
else
yearParameter = new SqlParameter("year", "");
SqlParameter makeParameter;
if (make != null)
makeParameter = new SqlParameter("make", make);
else
makeParameter = new SqlParameter("make", "");
SqlParameter modelParameter;
if (model != null)
modelParameter = new SqlParameter("model", model);
else
modelParameter = new SqlParameter("model", "");
using (AiContext dbContext = new AiContext())
using (ObjectContext objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dbContext).ObjectContext)
return objectContext.ExecuteStoreQuery<Vehicle>("SearchVehicles @VIN, " +
"@License, @Year, " +
"@Make, @Model",
vinParameter,
licenseParameter,
yearParameter,
makeParameter,
modelParameter).ToList();
我熟悉这个错误。 EF 显然认为我对模型进行了更改并希望我更新数据库。关于为什么我收到此错误或以其他方式扩展模型以添加属性或业务逻辑的任何想法?提前感谢您的帮助。
【问题讨论】:
【参考方案1】:如果您仅在业务逻辑中使用它而不打算将其映射为数据库中的列。您需要添加[NotMapped]
属性。
[NotMapped]
public string CustomerName get; set;
【讨论】:
哇!这么简单?但是,是的,我测试并修复了它。我打赌我用谷歌搜索了一个小时并阅读了三篇文章,但找不到这个解决方案。非常感谢。一个问题...是否有必要在方法中也添加相同的属性? 太棒了!感谢您分享您的知识。以上是关于如何扩展 Entity Framework 6 模型的主要内容,如果未能解决你的问题,请参考以下文章
如何用Entity Framework 6 连接Sqlite数据库
如何将 C# 8.0 可空引用类型与 Entity Framework Core 模型一起使用?
我应该如何在 Entity Framework 6 中播种数据
如何在 Entity Framework 6 中使用 DbDataReader 获取表名?