c# - 使用带有泛型类的 ContextBuilder 使用 Entity Framework 4 创建 EDMX/DB-Schema 的异常

标签 c# entity-framework generics exception .net-4.0-beta-2

我在 .NET 4 框架下使用 Microsoft.Data.Entity.CTP(在 Entity Framework CTP 中)从我的 C# 类创建 EDMX 元数据以创建数据库架构。

我设置了一个简单的模型:

public class AModelContainer : ObjectContext
{
    public IObjectSet<RegularClass> RegularClasses { 
        get { return CreateObjectSet<RegularClass>(); }
    }
}

我遵循基于我的模型定义新 ContextBuilder 的简单模式。

var builder = new ContextBuilder<AModelContainer>();

using(var context = builder.Create(new SqlConnection(connString)))
{
    context.RegularClasses.AddObject(new RegularClass());

    context.SaveChanges();
}

这很好用直到我尝试做一些更复杂的事情......

我用泛型类扩展我的模型

public class AModelContainer : ObjectContext
{
    public IObjectSet<SpecialClass<string>> SpecialClasses { 
        get { return CreateObjectSet<SpecialClass<string>>(); }
    }
}

现在在保存时我得到一个异常:

Mapping and metadata information could not be found for EntityType 'Prototype.SpecialClass`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.

AModelContainer 中的这一行:

return CreateObjectSet<SpecialClass<string>>();

我的通用“SpecialClass”的默认构造函数目前什么都不做,对吗?

public class SpecialClass<T> 
{
    public SpecialClass()
    { }
}

或者这是 ContextBuilder 的问题,不知 Prop 体要做什么,有没有办法使用 builder.ComplexType() 或其他方法来指导它?

或者CTP还不能处理这种情况...

我的类(class)名称后面的“`1”在异常(exception)情况下也不适合我......

最佳答案

您现在不能将泛型类用作 EF 的实体(以及扩展名 Code-Only)。

这是 CLR 和概念模型之间映射功能的限制。

在 Beta2 之后,我们添加了允许这种事情的能力:

public class Entity<TKey>
{
   public TKey ID {get;set;}
}

public class Person: Entity<int>
{
   public string Firstname {get;set;}
   public string Surname {get;set;}
}

哪里只有Person是 EF 模型中的“实体”,ID来自基类的属性显示为 Person 的属性.

但是 .NET 4.0/EF 4 中没有计划支持将泛型类本身映射到模型中的实体。

希望对你有帮助

亚历克斯

关于c# - 使用带有泛型类的 ContextBuilder 使用 Entity Framework 4 创建 EDMX/DB-Schema 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1912333/

相关文章:

c# - 引用装配错误

c# - 将对象转换到 T

c# - Excel:如果使用绝对路径只能打开文件,为什么?

c# - 我应该使用 isDbNull 吗?在这种特殊情况下如何使用它?

c# - File.Exists 可以抛出异常吗?

validation - Javax 验证 Kotlin 中的自定义枚举约束

java - 构造函数未定义错误和泛型类

c# - Asp.Net MVC 4 中的自定义 URL 路由

c# - 无法设置类型的属性,因为集合已设置为 EntityCollection

entity-framework - 从 EF 中的 EntityType 获取 EntitySet 名称