5

我有这个接收参数的动作,我想打印出所有结果

public ActionResult MusicaGenero(string genero) {

            //should return  more than 30 rows 
             var results = con.artista.Where(x=>x.genero==genero);


            return View(results);
        }

MusicaGenero 有这个

@model IEnumerable<MvcApplication1.Models.detallesMusica>

@{
    ViewBag.Title = "MusicaGenero";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Musica del genero de: @ViewBag.genero</h2>

<ul>
@foreach(var detallesMusica in Model)
{
    <li>@detallesMusica.artista</li>        
    <li>@detallesMusica.nombre</li> 
    <li>@detallesMusica.publicado</li>  
    <li>@detallesMusica.costo</li>  
}
</ul>

怎么可能,但它会引发异常

\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'album' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'genero' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'artista' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'albums' is based on type 'album' that has no keys defined.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'generos' is based on type 'genero' that has no keys defined.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'artista' is based on type 'artista' that has no keys defined.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.Entity.ModelConfiguration.ModelValidationException: One or more validation errors were detected during model generation:

\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'album' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'genero' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'artista' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'albums' is based on type 'album' that has no keys defined.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'generos' is based on type 'genero' that has no keys defined.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'artista' is based on type 'artista' that has no keys defined.

这里有什么问题?我已经添加了一个密钥,但仍然给我这个错误。

4

1 回答 1

6

如您所见,您遇到了 System.Data.Entity 错误,这些错误,至少在这种情况下,与您发布的代码无关。

实体框架需要某种方式知道它应该将哪个字段定义为主键。你可以通过两种方式告诉它如何做到这一点。

您可以定义名称为“Id”的属性,或将“Id”附加到与实体同名的属性中。例如,其中任何一个都可以工作

public class Album
{
  public string Id {get; set;}
  public string Name {get; set;}
}
public class Album
{
  public string AlbumId {get; set;}
  public string Name {get; set;}
}

EF 会根据命名约定理解为字段IdAlbumId主键。

您可以做的另一件事是使用System.ComponentModel.DataAnnotations [Key]属性来定义键。例如,这将使该字段Name成为表的主键。

using System.ComponentModel.DataAnnotations;
//...
public class Album
{
  [Key]
  public string Name {get; set;}
}
于 2013-03-14T17:50:11.793 回答