0

我正忙于学习 ASP.Net MVC,所以我最近在 Visual Studio 2010 Professional 上安装了 MVC 4。我正在尝试这个例子:

http://www.luisrocha.net/2010/11/creating-composite-keys-using-code.html

但是Visual Studio 找不到RelatedTo属性。我在这个问题上读到这可能是由于未安装 Entity Framework 4.1 造成的。我检查了System.Data.Entity.dll的版本号,它给出了版本 4.0.0.0,运行时版本 v4.0.30319。所以在我看来,这似乎是安装在我的计算机上的 EF 4.0 版。我可能在这方面是错的......所以如果我是,请有人纠正我。

我从这里下载了 EF 4.1并安装了它,但System.Data.Entity.dll的版本号似乎没有改变,并且RelatedTo属性仍然不起作用。任何人都知道安装出了什么问题以及我该如何解决?

更新:

我按照该站点上的说明使用nuget安装了Entity Framework ,控制台说它安装了EntityFramework 5.0.0-rc,但System.Data.Entity.dll的版本似乎没有改变。

不,我没有包括使用 System.Data.Entity,因为智能感知没有告诉我包括在内。我确实包含了System.ComponentModel.DataAnnotations使用了 System.ComponentModel.DataAnnotations.Schema,因为KeyColumn属性需要这些。Intellisense 要求我“为 'RelatedTo' 生成类”使用 System.Data.Entity添加并不会改变这一点。

这是我为那些要求它的人提供的代码,尽管它正是我在问题中链接到的教程中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace Example
{
    public class PlaylistTrack
    {
        [Key, Column(Order = 1)]
        public int PlaylistId { get; set; }

        [Key, Column(Order = 2)]
        public int TrackId { get; set; }

        [RelatedTo(ForeignKey = "PlaylistId")]
        public Playlist Playlist { get; set; }

        [RelatedTo(ForeignKey = "TrackId")]
        public Track Track { get; set; }
    }
}
4

1 回答 1

4

Try installing new version of EF using Nuget. It will resolve all dependencies of EF and it will make sure you have the latest version. I don't know what is RelatedTo attribute supposed to be doing here. And see here in the data annotations section, the related to attribute is not in the EF4.1 release. But you can do the same thing like this.

      [ForeignKey("PlaylistId")] 
      public Playlist Playlist { get; set; }

      [ForeignKey("TrackId")] 
      public Track Track { get; set; }

EDIT RelatedTo attribute is replaced by ForeignKey and InverseProperty attributes in EF 4.1 RC

于 2012-05-24T03:10:06.957 回答