我正在努力将 BitFactory.Logging 挂接到我的应用程序中。我的一个变化是我将 LogEvent 发布到我的 MySQL 数据库。运行代码优先,EF 4.1。
我编写了一个自定义数据库记录器,如下所示:
public class DBLogger : Logger
{
protected override bool DoLog(LogEntry aLogEntry)
{
_db.Add(aLogEntry);
_db.SaveChanges();
return true;
}
private static IDbContext _db = new MyDB();
public static IDbContext db
{
get { return _db; }
}
}
我有以下课程:
public class LEntry
{
public virtual LogEntry logEntry { get; set; }
}
}
我有以下 IDbContext:
public interface IDbContext
{
IQueryable<LEntry> LEntries { get; }
int SaveChanges();
T Attach<T>(T entity) where T : class;
T Add<T>(T entity) where T : class;
T Delete<T>(T entity) where T : class;
}
和以下
public class MyDB : DbContext, IDbContext
{
public DbSet<LEntry> LEntries { get; set; }
IQueryable<LEntry> IDbContext.LEntries
{
get { return LEntries; }
}
int IDbContext.SaveChanges()
{
return SaveChanges();
}
T IDbContext.Add<T>(T entity)
{
return Set<T>().Add(entity);
}
T IDbContext.Delete<T>(T entity)
{
return Set<T>().Remove(entity);
}
T IDbContext.Attach<T>(T entity)
{
var entry = Entry(entity);
entry.State = System.Data.EntityState.Modified;
return entity;
}
}
当我运行代码时,我收到以下错误:
“System.Data.Edm.EdmEntityType: : EntityType 'LEEntry' 没有定义键。定义此 EntityType 的键。”
如果我将 LEntry 课程更改为
public class LEntry
{
[Key]
public virtual int ID { get; set; }
public virtual LogEntry logEntry { get; set; }
}
}
并运行,我收到以下错误:
“‘LogEntry’类型映射为复杂类型。Set方法、DbSet对象和DbEntityEntry对象只能用于实体类型,不能用于复杂类型。”
如果我将 LEentry 更改为 ComplexType,如下所示:
[ComplexType]
public class LEntry
{
[Key]
public virtual int ID { get; set; }
public virtual LogEntry logEntry { get; set; }
}
然后我收到以下错误:
“类型‘MyDB.Models.LEentry’已经配置为实体类型。它不能重新配置为复杂类型。”
扔在
T IDbContext.Add<T>(T entity)
{
return Set<T>().Add(entity);
}
堵塞。
我要做的就是将 DoLog 方法发布到我的 MySQL 数据库中。
我究竟做错了什么?