【发布时间】:2018-01-15 12:57:10
【问题描述】:
我正在使用工作单元和存储库制作一个 MVC 项目。我将我的模型、控制器和映射等分离到解决方案中的不同库中。在使用基本实体时,我碰巧遇到了一个问题,即我用于基于基本实体的多个表的 ID 在这种情况下会增加。当我向表 A 插入新数据时,EX 的 ID 自动增加:1,但是当我向表 B 插入新数据时,ID 增加其值 A 的值,表 B 的第一个数据的 ID 值为 2 . 我怎样才能设法将表之间的 ID 分开以增加 TABLE 的当前值而不是 TABLE 所基于的 BASE ENTITY 的当前值? 这是我的基础实体:
namespace Thaco_Model.Model
{
public interface IBaseEntities
{
long ID { get; set; }
String name { get; set; }
}
public class BaseEntities : IBaseEntities
{
[Key]
public long ID { get; set; }
public String name { get; set; }
public HttpStatusCode StatusCode { get; set; }
public Boolean IsDelete { get; set; }
public int creator_ID { get; set; }
public Nullable<int> editor_ID { get; set; }
public Nullable<DateTime> created_Date { get; set; }
public Nullable<DateTime> edited_Date { get; set; }
}
}
这是我的A桌
namespace Thaco_Model.Model
{
[Table("ValueFlag")]
public class Value_Flag :BaseEntities
{
}
}
这是我的 B 桌:
namespace Thaco_Model.Model
{
[Table("DefinedValue")]
public class Defined_Value : BaseEntities
{
public long flag_ID { get; set; }
}
}
这是我的存储库:
namespace Data
{
public class Repository<T> : IRepository<T> where T : BaseEntities
{
private readonly DB_ver_5 context;
private IDbSet<T> entities;
string errorMessage = string.Empty;
public Repository(DB_ver_5 context)
{
this.context = context;
}
public T GetById(object id)
{
return this.Entities.Find(id);
}
public void Insert(T entity)
{
try
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
this.Entities.Add(entity);
this.context.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
errorMessage += string.Format("Property: {0} Error: {1}",
validationError.PropertyName, validationError.ErrorMessage) + Environment.NewLine;
}
}
throw new Exception(errorMessage, dbEx);
}
}
public void Update(T entity)
{
try
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
this.context.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
errorMessage += Environment.NewLine + string.Format("Property: {0} Error: {1}",
validationError.PropertyName, validationError.ErrorMessage);
}
}
throw new Exception(errorMessage, dbEx);
}
}
public void Delete(T entity)
{
try
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
this.Entities.Remove(entity);
this.context.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
errorMessage += Environment.NewLine + string.Format("Property: {0} Error: {1}",
validationError.PropertyName, validationError.ErrorMessage);
}
}
throw new Exception(errorMessage, dbEx);
}
}
public virtual IQueryable<T> Table
{
get
{
return this.Entities;
}
}
private IDbSet<T> Entities
{
get
{
if (entities == null)
{
entities = context.Set<T>();
}
return entities;
}
}
}
}
【问题讨论】:
-
向我们展示您的代码。基础实体和至少一个子类
-
我要归档的是表A和表B的数据ID都是从1开始的,不是根据彼此当前ID计算的,还有一件事,我不使用任何外国键入这个模型,我使用代码优先来创建这些实体
-
您可以从样本中删除 usings,它只占用空间。好的,您的基础存储库看起来如何?
标签: c# sql-server entity-framework asp.net-mvc-5 n-tier-architecture