C#Winformsを使用して簡単なメッセージングアプリケーションを作成しています。私はSQLEXPRESSサーバに接続しています。私のコンピュータ上で実行し、そこにすべてを保存しています。単一の受信者にメッセージを送信するエンティティフレームワークの反復エラー
public class UserContext : DbContext {
public UserContext() : base("name=BuddyDatabase") {
}
public DbSet<User> Users { get; set; }
public DbSet<Message> Messages { get; set; }
}
public class User {
[Key]
public string username { get; set; }
public string password { get; set; }
public static implicit operator User(bool v) {
throw new NotImplementedException();
}
public virtual List<User> friends { get; set; }
}
public class Message {
[Key]
public int ID { get; set; }
public virtual User sender { get; set; }
public virtual User recipient { get; set; }
public string content { get; set; }
public virtual List<User> group { get; set; }
}
非常にシンプル
は動作しますが、私は「メッセージが画面」開くたびに、グループメッセージングが、私はこのエラーを取得していません:
ここ は私のスキーマです'WindowsFormsApp1.User'型の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。
そして、これは、最大メッセージ画面がロード私が実行したメソッドです。
var x = db.Messages.Where(b => b.recipient.username == currentuser.username);
foreach (var y in x) {
MainMessagesBox.Text += y.content;
}
x = null;
var z = db.Messages.Where(b => b.group.Contains(currentuser));
foreach (var y in z) {
MainMessagesBox.Text += y.content;
}
(Visual Studioは、エラーの原因として、この行の「中」を強調しています。)
のforeach {
私はWhereメソッドを使用し、非プリミティブ(エラーメッセージが示唆しているもの)を含む問題が発生する可能性があるので、グループを文字列のリストに変更してみました。意図された受信者のユーザー名を含み、変更されたそれに応じてメソッドが動作しませんでした。要請に応じて、試用版のコードとエラーを提供します。ここ
は、実際の「メッセージを送信」コードである:
if (!textBox1.Text.Contains(',')) {
db.Messages.Add(new Message { sender = currentuser, recipient = db.Users.Find(textBox1.Text), content = currentuser.username + ": " + ContentBox.Text + "\n" });
db.SaveChanges();
} else {
List<User> recips = new List<User>();
string[] poop = textBox1.Text.Split(',');
foreach (var x in poop) {
recips.Add(db.Users.Find(x));
}
db.Messages.Add(new Message { sender = currentuser, group = recips, content = ContentBox.Text });
db.SaveChanges();
}
poopが、これは一時的なものであり、テキストボックスからコンマによって分離された受信者の配列です。
申し訳ありません何か書式が間違っているかわかりませんが、これは私の最初の質問です。
ありがとうございます。
Messagesテーブル(「https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx – Bitmask
」の「送信者」と「受信者」の外部キーを定義する必要があります。私が正しく理解している場合、メッセージは単一の受信者またはグループに送信されます。しかし、あなたのデータベースでそれを別々に扱うべきではありません。受信者リストに複数の受信者があるメッセージ、または受信者リストに1つしかないメッセージがあります。 – sbecker