【发布时间】:2015-04-04 07:02:47
【问题描述】:
假设我有以下模型:
class Foo
{
public delegate void Bar();
public Bar MyBar { get; set; }
}
我想将此映射到我的实体:
class FooEntity
{
public delegate void Bar();
public Bar MyBar { get; set; }
}
这是怎么做到的?我尝试过使用 Automapper:
void ConfigureMappings()
{
// how else do I need to configure this?
Mapper.CreateMap<Foo, FooEntity>();
Mapper.CreateMap<Foo.Bar, FooEntity.Bar>(); // is this right?
}
让数据驱动这个委托对我来说很重要,因为我需要能够根据MyBar 的值在数百种不同的方法之间进行切换。有什么想法吗?
编辑:好的,因此在将委托移出每个类的范围后从模型映射到实体时不再引发异常:
public delegate void Bar(object obj);
public class Foo
{
public Bar MyBar { get; set; }
}
public class FooEntity
{
public Bar MyBar { get; set; }
}
现在我收到:错误 3004:从第 6 行开始映射片段时出现问题:没有为 Set Foos 中的属性 FooEntity.MyBar 指定映射。在以下情况下,具有密钥 (PK) 的实体将不会往返:实体类型为 [Project.MyDbContext.FooEntity]。
我的数据库上下文代码如下所示:
class MyDbContext : DbContext
{
DbSet<FooEntity> Foos { get; set; }
}
我将它保存到数据库中:
public static class Test()
{
var foo = new Foo { MyBar = MyFancyDelegate };
using (var context = new MyDbContext())
{
context.Foos.Add(Mapper.Map<FooEntity>(foo));
context.SaveChanges();
}
}
public static void MyFancyDelegate(object obj)
{
Console.Write("test");
}
我的问题只是我想做的事吗?不能将委托方法保存到 SQL 表中吗?
【问题讨论】:
-
现在您无法在 SQL 表中保存 函数 (或委托) - 最坏的情况是,这意味着将您的所有程序(代码)和内存(状态)序列化为这个确切的时间点
-
所以解决方案显然是考虑需要什么样的数据来重新创建
Bar并将其序列化到 SQL 表中;) -
问题是我需要代理潜在地做很多非常不同的事情。我试图避免有一个完全专门用于存储为此目的的静态方法的类,但如果我不能将它们存储在 SQL 中,我看不到解决办法。
-
您将不得不找到一种方法,抱歉 - 正如我所说:您的代表可能会被各种关闭和东西绑定,老实说,我不知道您为什么要保存它跨度>
-
如果您要对该问题投反对票,请说明您这样做的原因。
标签: c# entity-framework automapper