EF4 - POCO问题

时间:2009-05-27 19:55:34

标签: entity-framework

我只是尝试使用自我跟踪POCO方法做一些广泛的模型。但是,我确实没有按照自己的意愿去工作。我们来一个博客吧。每个博客都有一组条目,每个条目都有一组评论。不幸的是,以下模型对我不起作用。 alt text http://blog.zoolutions.se/issue.png

POCO类的实现如下:

public class Blog
{
    public bool Id { get; private set; }
    public string Title { get; set; }
    public bool AllowComments { get; set; }
    public User User { get; set; }
    public IList<Entry> Entries { get; set; }
}

public abstract class Post
{
    public virtual int Id { get; set; }
    public virtual string Header { get; set; }
    public virtual string Text { get; set; }
    public virtual DateTime CreatedAt { get; set; }
    public virtual int UserId { get; set; }
}

public class Entry : Post
{
    public Blog Blog { get; set; }
    public IList<Comment> Comments { get; set; }        
}

public class Comment : Post
{
    public Entry Entry { get; set; }
}

这给了我一个非常奇怪的错误:

  

System.Data.MetadataException:Schema   指定无效。错误:   CLR类型到EDM类型的映射是   因为多种CLR类型而模棱两可   匹配EDM类型'Entry'。先前   发现新发现的CLR类型'Entry'   CLR类型   'System.Collections.Generic.Dictionary 2+Entry'. The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'Entry'. Previously found CLR type 'Entry', newly found CLR type 'System.Runtime.CompilerServices.ConditionalWeakTable 2 +条目'。

任何线索?我无法绕过那条错误信息......

2 个答案:

答案 0 :(得分:4)

在Beta1中,CLR类到EDM类型的映射有些不可原谅。

听起来好像这里的问题是找到了多个“Entry”类,它们与所需的“Entry”实体不匹配。我们应该忽略这些,但在Beta1中我们没有,你会得到一个例外。

我们已经为下一个测试版开发了这个,所以相反,EF继续寻找匹配的类,在你的情况下会找到你的Entry类,一切都没问题。

在Beta2发布之前,您可能需要将Entry类的名称更改为更独特的名称。

希望这有帮助

亚历

实体框架团队的项目经理。

答案 1 :(得分:1)

无法在Alex James的回复下添加此帖子。

EF4仍然有一个错误,微软已经在EF 4 Beta 2中修复了类似的错误。

当类似local名称的类存储在包含实体的程序集中但属于不同的EF4 edmx模型文件时(例如:当Country实体存在时),我遇到了一个错误在GeographyConfigurationModel.edmx和CustomerServiceModel.edmx中。两个Country类在每个模型中包含不同的属性集,每个模型位于单独的项目文件夹中,指定entity namespace模型属性(并立即忽略)。