0

EntityFrameworkコードファーストアプローチを使用しています。私のコーディングは

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 に 2 つのテーブル (ブログと投稿) を作成しました。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();

ここでは、タイトル、コンテンツのデータを読み取っています。次に、タイトル、コンテンツ、ブログ ID (別のテーブルから取得したもの) を Posts テーブルに追加します。

BlobId = id1 でエラーが発生しました

' System.Linq.IQueryable ' 型を暗黙的に変換できませんこのエラーが発生しています

         }
         Console.ReadLine();
     }
}

これを解決するのを手伝ってくれませんか。私が説明したことを理解していない場合は、返信してください

4

1 に答える 1

0

次のクエリは要素のシーケンスであり、スカラー値ではありません。結果が 1 つしかないと思われる場合でも、クエリの結果が繰り返されると、1 つの要素を持つコレクションになります。

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代わりに null 許容 int を使用して代入することをお勧めします。

于 2013-04-12T09:32:43.740 に答える