1

「本棚」テストアプリケーションに2つのPOCOがあります。

/// <summary>
/// Represents a book
/// </summary>
public class Book
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public string ISBN { get; set; }
    public virtual Loaner LoanedTo { get; set; }
}

/// <summary>
/// Represents a Loaner
/// </summary>
public class Loaner
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Book> Loans { get; set; }
}

LoanedToをnull許容にする方法はありますか?つまり、本が常に貸し出されているわけではありません。私は試した

public virtual Loaner? LoanedTo { get; set; }

しかし、次のようになります。ジェネリック型またはメソッド「System.Nullable」でパラメーター「T」として使用するには、型「RebtelTests.Models.Loaner」はnull許容値ではない型である必要があります。

だからどこかで間違って考えているに違いないが、理解できない。おそらくあなたたちのために簡単に絞ることができます。

4

3 に答える 3

6

特別なことをする必要はありません。クラスは常にnull許容です。

私はこれを(MVC3で)試しました:

私のModelsディレクトリ:

namespace MvcApplication2.Models
{
    public class Book
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public string ISBN { get; set; }
        public virtual Loaner LoanedTo { get; set; }
    }

    public class Loaner
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Book> Loans { get; set; }
    }

    public class BookContext : System.Data.Entity.DbContext
    {
        public System.Data.Entity.DbSet<Book> Books { get; set; }
        public System.Data.Entity.DbSet<Loaner> Loaners { get; set; }
    }
}

私のHomeControllerで:

namespace MvcApplication2.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            string message = "OK";

            try
            {
                var context = new Models.BookContext();
                var book = new Models.Book();
                book.Title = "New Title";
                book.Author = "New Author";
                book.ISBN = "New ISBN";
                context.Books.Add(book);
                context.SaveChanges();
            }
            catch (Exception err)
            {
                message = err.ToString();
            }

            ViewBag.Message = message;

            return View();
        }

    }
}

Web.Configの接続文字列:

<add name="BookContext" connectionString="Data Source=|DataDirectory|BookContext.sdf" providerName="System.Data.SqlServerCe.4.0" />

アプリケーションを実行すると、ビューに「OK」と表示されます。これは、例外がスローされなかったことを意味します。App_Dataフォルダーを見ると、BookContext.sdfファイルが作成されています。そのデータベースには、BooksとLoanersのテーブルが含まれています。Loanersのテーブルは空です。Booksのレコードには1つのレコードが含まれています。

ID: 1; Title: "New Title"; Author: "New Author"; ISBN: "New ISBN"; LoanerID: null
于 2011-01-26T11:08:24.110 に答える
1

int、bool、floatなどの単純なプロパティについて話している場合は、int?、bool?、またはfloat?を使用します。

お気に入り

 public int? ID { get; set; }
 public bool? Exists { get; set; }
于 2012-11-22T17:21:51.920 に答える
-1

こんなもの使ってみませんか

public virtual Nullable<Loaner> LoanedTo { get; set; }

これにより、LoanedToはnull許容プロパティになります。

于 2011-01-26T07:05:32.800 に答える