0

我正在使用 EntityFramework codefirst 方法。我的编码是

class Blog
{
    [Key]
    public int BlobId { get; set; }
    public string Name { get; set; }
    public virtual List<Post> Posts { get; set; }
}

class Post
{
    [Key]
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int BlobId { get; set; }
    public virtual Blog Blob { get; set; }
}

class BlogContext:DbContext
{
    public BlogContext() : base("constr") { }
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
      using (var db = new BlogContext())
        {
            Console.WriteLine("Enter a name for a new blob:");
            var name = Console.ReadLine();
            var b = new Blog { Name = name };
            db.Blogs.Add(b);
            db.SaveChanges();

直到这一步,我在我的 SQlserver 中创建了两个表(博客和帖子)。BlobId 是博客表中的主键。和帖子表中的外键。博客表中的 Blogid 是自动递增的。帖子表中的 postid 也是自动递增的

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BlogContext())
        {
            Console.WriteLine("Enter a name for a new blob:");
            var name = Console.ReadLine();
            var b = new Blog { Name = name };
            db.Blogs.Add(b);
            db.SaveChanges();

在这里,我在博客表中添加了名称

             var id1 = from val in db.Blogs
             where val.Name == name
             select val.BlobId;

现在通过使用 Name 获取 blogs 表的 blogid

            Console.WriteLine("Enter Title:");
            var title = Console.ReadLine();
            Console.WriteLine("Enter Content");
            var content = Console.ReadLine();
            var c = new Post { Title = title, Content = content, BlobId = id1};
            db.Posts.Add(c);
            db.SaveChanges();

这里正在读取标题、内容的数据。然后将标题、内容和 blogid(我从另一个表中获得)添加到 Posts 表中

我在 BlobId = id1 处收到错误

我越来越无法将类型'System.Linq.IQueryable'隐式转换为'int'这个错误

         }
         Console.ReadLine();
     }
}

你能帮我解决这个问题吗?如果你不明白我的解释,请回复我

4

1 回答 1

0

下面的查询是一个元素序列,而不是一个标量值,即使你认为只有一个结果,但当对查询结果进行迭代时,它仍然是一个包含一个元素的集合:

var id1 = from val in db.Blogs
         where val.Name == name
         select val.BlobId;

将其更改为:

int id1 = (from val in db.Blogs
         where val.Name == name             
         select val.BlobId).First();

此查询将立即执行并返回序列中的第一个元素。如果没有匹配,它将抛出异常,因此您可能希望使用FirstOrDefault并分配给可为空的 int 代替。

于 2013-04-12T09:32:43.740 回答