使用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是博客表中的主键。帖子表中的外键。博客表中的博客是自动递增的。帖子在帖子中表格也会自动递增
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 am获取博客表的博客
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();
这里正在阅读标题,内容的数据。然后将标题,内容和博客(我从另一张表中获得)添加到帖子表中
我在BlobId = id1
时遇到错误得到无法将类型'System.Linq.IQueryable'隐式转换为'int'此错误
}
Console.ReadLine();
}
}
你能帮我解决一下。如果你不明白我的解释,请回复我
答案 0 :(得分: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。