对于现有博客实体,我要添加一个新帖子,并使用B 日志作为导航属性。错误是正在插入重复博客。使用 EF Core 2.2
class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.HasOne(p => p.Blog)
.WithMany(b => b.Posts)
.HasForeignKey(p => p.BlogId);
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
PostFactory.cs
public Post CreateNew(Guid id)
{
var post = new Post(id);
return post;
}
PostService.cs
public Post Create(Guid blogId)
{
var blog = _context.Blogs.Include(t=>t.Posts).FirstOrDefault(x => x.Id == blogId);
var postFactory = new PostFactory();
var post = postFactory.CreateNew(Guid.NewGuid());
post.Blog = blog;
post.BlogId = blogId;
blog.Posts.Add(post);
_context.SaveChanges();
return post;
}
不确定为什么要再次尝试将现有Blog插入数据库。我收到错误消息:
违反PRIMARY KEY约束“ PK_Blogs”。无法在对象'dbo.Blogs'
中插入重复的密钥答案 0 :(得分:0)
您应该在帖子中分配blogId或将帖子添加到博客,我相信两者都会给您带来意想不到的结果,请尝试以下操作:
/******SERVER******/
struct in_addr localInterface;
struct sockaddr_in groupSock;
int sd;
char databuf[10] = "balblabla";
int main (int argc, char *argv[ ])
{
sd = socket(AF_INET, SOCK_DGRAM, 0);
if(sd < 0)
{
perror("Opening datagram socket error");
exit(1);
}
else
printf("Opening the datagram socket...OK.\n");
memset((char *) &groupSock, 0, sizeof(groupSock));
groupSock.sin_family = AF_INET;
groupSock.sin_addr.s_addr = inet_addr("226.1.1.1");
groupSock.sin_port = htons(4321);
localInterface.s_addr = inet_addr("192.168.2.2");
if(setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface)) < 0)
{
perror("Setting local interface error");
exit(1);
}
else
printf("Setting the local interface...OK\n");
reloop:
if(sendto(sd, databuf, datalen, 0, (struct sockaddr*)&groupSock, sizeof(groupSock)) < 0)
{
perror("Sending datagram message error");
}
else
printf("Sending datagram message...OK\n");
sleep(1);
goto reloop;
return 0;
}