我有一个asp.net mvc web应用程序,在那里我可以获得
"The INSERT statement conflicted with the FOREIGN KEY"
这不是主要问题。我知道我为什么会得到这个例外。但问题是它降低了所有用户的整个系统。
我的存储库接口:
public interface IRepository<TEntity> : IDisposable where TEntity : class
{
IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "");
TEntity GetByID(int id);
int Insert(TEntity entity);
int Delete(int id);
int Delete(TEntity entityToDelete);
int Update(TEntity entityToUpdate);
DbRawSqlQuery<TEntity> SQLQuery<TEntity>(string sql, params object[] parameters);
int Save();
}
存储库实现:
public class Repository<TEntity> : IRepository<TEntity>, IDisposable where TEntity : class
{
internal DbContext context;
internal DbSet<TEntity> dbSet;
public Repository(DbContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
try
{
IQueryable<TEntity> query = dbSet.AsNoTracking();
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
catch (Exception)
{
return null;
}
}
public virtual TEntity GetByID(int id)
{
try
{
return dbSet.Find(id);
}
catch (Exception)
{
return null;
}
}
public virtual int Insert(TEntity entity)
{
try
{
dbSet.Add(entity);
return 1;
}
catch (Exception ex)
{
return 0;
}
}
public virtual int Delete(int id)
{
try
{
TEntity entityToDelete = dbSet.Find(id);
Delete(entityToDelete);
return 1;
}
catch (Exception ex)
{
return 0;
}
}
public virtual int Delete(TEntity entityToDelete)
{
try
{
if (context.Entry(entityToDelete).State == EntityState.Detached)
{
dbSet.Attach(entityToDelete);
}
dbSet.Remove(entityToDelete);
return 1;
}
catch (Exception ex)
{
return 0;
}
}
public virtual int Update(TEntity entityToUpdate)
{
try
{
context.Set<TEntity>().AddOrUpdate(entityToUpdate);
return 1;
}
catch (Exception ex)
{
return 0;
}
}
public DbRawSqlQuery<TEntity> SQLQuery<TEntity>(string sql, params object[] parameters)
{
try
{
var result = context.Database.SqlQuery<TEntity>(sql, parameters);
return result;
}
catch (Exception ex)
{
throw ex;
}
}
public int Save()
{
try
{
context.SaveChanges();
return 1;
}
catch (Exception ex)
{
//foreach (var entry in context.ChangeTracker.Entries())
//{
// switch (entry.State)
// {
// case EntityState.Modified:
// case EntityState.Deleted:
// entry.State = EntityState.Modified; //Revert changes made to deleted entity.
// entry.State = EntityState.Unchanged;
// break;
// case EntityState.Added:
// entry.State = EntityState.Detached;
// break;
// }
//}
//return 0;
throw ex;
}
//}
}
#region Disposal Methods
// Dispose Methods
private bool _disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~Repository()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
if (_disposed)
return;
if (disposing)
{
// free other managed objects that implement
// IDisposable only
}
// release any unmanaged objects
// set the object references to null
_disposed = true;
}
#endregion
}
依赖注入类:
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType(typeof(IRepository<>), typeof(Repository<>), new InjectionConstructor(new DbContext("PLLEntities")));
container.RegisterType(typeof(IBaseService<>), typeof(BaseService<>));
container.RegisterType<IErrorEngine, ErrorEngine>();
container.RegisterType<ILoggingEngine, LoggingEngine>();
container.RegisterType<IIdentityManager, IdentityManager>();
不知道主要问题在哪里。
问题很可能与缺少主键定义有关。请检查相关实体,并确保您使用实体类中的[key]属性定义了主键。否则你会遇到"INSERT语句与FOREIGN KEY约束冲突">错误。
public class YourEntity
{
[Key]
public int Id { get; set; }
//other properties
}